2012-11-30 44 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