如何在具有条款中具有“不同”

dit*_*lav 2 sql informix

编辑:这是一个示例关系!我需要它来处理更大的关系,所以没有解决方法!

所以我得到了一个简单的任务,起初我没有看到可能有什么问题,现在我只是不明白为什么它不起作用。

假设我有一张人和他们的朋友的桌子,我想选择那些有 2 个或更多朋友的人。

人们

------------------------------
|person  | friend | relation |
|-----------------------------
|ana     | jon    | friend   |
|ana     | jon    | lover    |
|ana     | phillip| friend   |
|ana     | kiki   | friend   |
|mary    | jannet | friend   |
|mary    | jannet | lover    |
|peter   | july   | friend   |
Run Code Online (Sandbox Code Playgroud)

我想做一个

 SELECT person FROM people GROUP BY person HAVING count(distinct friend) > 1;
Run Code Online (Sandbox Code Playgroud)

并得到

-------
| ana |
-------
Run Code Online (Sandbox Code Playgroud)

但是distinct在 HAVING 子句中使用“ ”时出现语法错误。我知道 ' distinct' 是投影子句的一部分,但是如何让 ' count' 只计算不同的条目而没有额外的子查询或其他东西?

编辑:我能想到的最好的是:

SELECT tmp.person FROM (SELECT person, count(distinct friend) 
             AS numfriends FROM people GROUP BY person) AS tmp 
       WHERE tmp.numfriends > 1;
Run Code Online (Sandbox Code Playgroud)

Abh*_*rty 5

从文档

http://www-01.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0162.htm

HAVING 子句中的条件不能包含 DISTINCT 或 UNIQUE 聚合表达式。

一种解决方法是在选择中使计数不同

SELECT 
person,
count(distinct friend) as f_count
FROM people 
GROUP BY person 
HAVING f_count > 1;
Run Code Online (Sandbox Code Playgroud)

更新 :

检查了文件,发现了事实

HAVING 子句在 SELECT 之前进行评估 - 因此服务器还不知道该别名。

因此,为了实现目标,可以这样做

select
person,
f_count
from(
 SELECT 
 person,
 count(distinct friend) as f_count
 FROM people
 GROUP BY person 
)x
where f_count > 1 
Run Code Online (Sandbox Code Playgroud)