如何在有条款中有'明确'

时间:2015-04-10 07:27:31

标签: 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   |

我想做一个

 SELECT person FROM people GROUP BY person HAVING count(distinct friend) > 1;

并获取

-------
| ana |
-------

但是在使用' 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;

4 个答案:

答案 0 :(得分:3)

来自文档

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;

更新:

检查文件并找到事实

  

在SELECT之前评估HAVING子句 - 所以服务器   我还不知道这个别名。

因此,要实现目标,可以将其作为

来实现
select
person,
f_count
from(
 SELECT 
 person,
 count(distinct friend) as f_count
 FROM people
 GROUP BY person 
)x
where f_count > 1 

答案 1 :(得分:0)

你需要像这样写

SELECT person
FROM people
WHERE relation = 'friend'
GROUP BY person 
HAVING count(*) > 1;

答案 2 :(得分:0)

请检查一下。

declare @t table(person varchar(50),  Friend VARCHAR(50), relation VARCHAR(50))

INSERT INTO @T VALUES('ana', 'jon','friend')
,('ana', 'jon','lover')
,('ana', 'phillip','friend')
,('ana', 'kiki','friend')
,('mary', 'jannat','friend')
,('mary', 'jannat','lover')


SELECT DISTINCT PERSON FROM 
(
    SELECT person FROM @t GROUP BY person HAVING count(friend) > 1
) a

答案 3 :(得分:0)

通过使用更多分组依据-

select cust_xref_id
from(
select cust_xref_id,cm11
from temp_nippon_cust
group by cust_xref_id,cm11
) temp
group by cust_xref_id
having count(cm11) > 1