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  
-------------------------------------------------- -----------------
网址1 | 3 | 2    
网址2 | 2 | 2    

我在 stackoverflow 中的这个解决方案的帮助下提出了下面的查询,它为我提供了我需要的前 2 列:

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

但是如何将第三列也添加到我的查询中?

你能帮我么?

4

1 回答 1

6

正如您自己提到的,您可以使用DISTINCT关键字来获得不同URL的 s。用于获取每个s 的COUNT计数IPCOUNT(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 回答