mysql - 在同一查询中选择 Count of ip 和 Count of DISTINCT ip

标签 mysql sql count group-by distinct

我有一个这样的表结构:

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 列:

Distinct URL    |    count of ip            |    count of distinct ip
                |    for each distinct url  |    for each distinct url  
-------------------------------------------------------------------
url1            |    3                      |    2    
url2            |    2                      |    2    

I came up with my query below by the help of this solution in stackoverflow which gives me the first 2 columns that I need:

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

但是我怎样才能将第 3 列也添加到我的查询中呢?

你能帮帮我吗?

最佳答案

正如您自己提到的,您可以使用 DISTINCT 关键字来获取不同的 URL。使用 COUNT 获取 IP 的计数,使用 COUNT(DISTINCT ID) 获取每个 的不同 IP网址

试试这个:

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 ║
╚═══════╩════╩══════╝

See this SQLFiddle

关于mysql - 在同一查询中选择 Count of ip 和 Count of DISTINCT ip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337092/

相关文章:

mysql - Union - 同一个表,不包括以前的结果 MySQL

php - 在oop中打印数据库中数据插入的消息

用于 n*m 插入的 MySQL 存储过程

mysql - 使用 ORDER 或 MAX() 连接?

sql - 如何在 image/varbinary 字段中搜索以二进制模式开头的记录

mysql - PK for web,autoincrement vs UUID 风格,哪个更好,为什么?

mysql - 在 mysql 查询中将 int 引用为字符串

SQL查询以获取具有重复值但不属于同一组的所有行

sql - 如何从 PostgreSQL 中的另一个表生成日期范围 + 计算更早的日期?

python - 计算列表中字符串或 float 的频率