2015-07-13 88 views
0

我有一个包含3个值包含有特定属性的元素计数组

CREATE TABLE x (
start  integer NOT NULL, 
end  integer NOT NULL, 
random  integer NOT NULL); 

我要计数组包含的至少一种元素与random > 42但是比大的量(GROUP BY start,end)的表一个元素。但据我所知HAVING只能用于聚合函数。

我当前的尝试:

SELECT count(*) FROM (
SELECT count(*) FROM routes 
GROUP BY start,end 
HAVING random > 42 
AND count(*) > 1); 

结果

没有这样的列:随机

什么是解决这一问题的最有效方法是什么?

+0

对不起,我忘了混乱要提到的是,这些团体还必须包含一个以上的利益要素。我确实编辑了它。 – Sim

回答

2
SELECT count(*) 
FROM (SELECT SUM(case when random > 42 then 1 else 0 end) as cnt 
     FROM routes 
     GROUP BY start,end 
     HAVING count(*) > 1) as t 
WHERE cnt > 1 
+0

关闭了,但是在这之前已经完成了,因此您仍然可以对可能包含一个元素 – Sim

+0

的组进行计数,以便仅选择包含多个元素的组 – nick

0

包括像下面

SELECT count(case when random > 42 then 1 else 0 end) as computed_column 
FROM routes 
GROUP BY start, end; 

您的查询是有点怪在你的集合函数本身的条件下,它可以重新写的

SELECT COUNT(*) FROM 
(
SELECT count(*) as Count_Route 
FROM routes 
WHERE random > 42 
GROUP BY start, end 
HAVING count(*) > 1 
) XXX; 
相关问题