3

次のようなテーブル構造があります。

TABLE NAME : counter

id  |        datetime       |  url  | ip
-------------------------------------------
1   |2013-04-12 13:27:09    | url1  | ip01
2   |2013-04-13 10:55:43    | url2  | ip02
3   |2013-04-14 11:14:12    | url1  | ip03
4   |2013-04-15 23:23:55    | url2  | ip04
5   |2013-05-02 08:34:44    | url1  | ip03

スマートSELECTクエリを使用して、次の 3 つの列を取得したいと考えています。

固有の URL | IP の数 | 固有の IP の数
                | | 個別の URL ごとに | 個別の URL ごとに  
-------------------------------------------------- -----------------
URL1 | 3 | 2    
url2 | 2 | 2    

私は必要な最初の2つの列を提供するスタックオーバーフローのこのソリューションの助けを借りて、以下のクエリを思いつきました:

SELECT url, COUNT(*) AS total_ip FROM counter GROUP BY url ORDER BY total_ip DESC

しかし、クエリに 3 番目の列も追加するにはどうすればよいでしょうか?

手伝ってくれませんか?

4

1 に答える 1

6

あなた自身が言及したように、DISTINCTキーワードを使用して個別URLの s を取得できます。COUNTのカウントをIP取得し、各s のCOUNT(DISTINCT ID)個別を取得するために使用しますIPURL

これを試して:

SELECT DISTINCT URL AS D_URL
      ,COUNT(IP) AS IP
      ,COUNT(DISTINCT IP) AS D_IP
FROM counter
GROUP BY URL

出力:

╔═══════╦════╦══════╗
║ D_URL ║ IP ║ D_IP ║
╠═══════╬════╬══════╣
║ url1  ║  3 ║    2 ║
║ url2  ║  2 ║    2 ║
╚═══════╩════╩══════╝

このSQLFiddleを参照してください

于 2013-05-02T11:40:02.473 に答える