2

私は次の表を持っています

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 BY video_id?

このクエリをより効率的に書く他の方法はありますか?

4

2 に答える 2

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
于 2012-11-30T06:49:02.890 に答える
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
于 2012-11-30T06:48:56.207 に答える