2011-11-30 97 views
0

我有这样多个重复找到

ticket_id destination 
--------- ----------- 
5   Paris 
5   Paris 
5   California 
5   Paris 
6   Nebraska 
15   London 
6   Nebraska 
6   Nebraska 

一个表,我想选择所有的票ID的表中有超过2倍,并以相同的目的地。

所以,在这种情况下,我会获得一个表,如:

ticket_id destination num_times 
--------- ----------- --------- 
5   Paris  3 
6   Nebraska 3 

我知道如何获得重复,所有门票某些时间:

SELECT ticket_id, destination, 
COUNT(ticket_id) AS num_times 
FROM table 
GROUP BY ticket_id 
HAVING (COUNT(*) > 2) 

但是我不知道怎么样我可以添加目的地相似度。

回答

4

只需按两票ID和目的地:

SELECT ticket_id, destination, 
COUNT(ticket_id) AS num_times 
FROM table 
GROUP BY ticket_id, destination 
HAVING (COUNT(*) > 2) 
1

顺便说一句,您的查询并不需要是这么大。这里是一个可行的简短版本:

SELECT ticket_id, destination, COUNT(*) AS num_times 
FROM table 
GROUP BY 1, 2 
HAVING COUNT(*) > 2 

口头禅:LESS == GOOD

+0

口头禅:尽量避免位置字段引用和使用明确的字段名称,而不是;-) – zerkms

+0

@zerkms我已经做了20年以上,并使用位置引用*从来没有*造成问题。主要是阅读起来更容易(特别是大量的非聚合列),并且不必重复计算(如果计算了非聚合列) – Bohemian