2012-11-30 42 views
2

我有以下表是否可以将GROUP BY语句嵌套在一起?

video_id ip_address 
1   192.168.1.1 
1   192.168.1.1 
1   192.168.1.2 
2   192.168.1.2 
2   192.168.1.2 
2   192.168.1.2 

运行下面的查询返回每部影片的每个IP地址的唯一请求量。

SELECT video_id, COUNT(*) as num_unique_requests FROM 
    (SELECT video_id, ip_address FROM videos 
    GROUP BY video_id, ip_address) t 
GROUP BY video_id 
ORDER BY num_unique_requests DESC 

video_id num_unique_requests 
1   2 
2   1 

有没有什么方法可以让我窝在最里面的GROUP BY声明与另一GROUP BY语句,以便我能避免产生最外层的语句GROUP BYvideo_id?

是否有任何其他方式来更有效地编写这个查询?

回答

2

只需使用COUNT(DISTINCT FILEDNAME)

SELECT video_id, COUNT(DISTINCT ip_address) as num_unique_requests FROM 
videos 
GROUP BY video_id 
ORDER BY num_unique_requests DESC 
1

在你的情况,DISTINCT在内部查询是贴切,到位的GROUP BY

SELECT video_id, COUNT(*) as num_unique_requests 
FROM 
    (SELECT DISTINCT video_id, ip_address FROM videos) t 
GROUP BY video_id 
ORDER BY num_unique_requests DESC