首页 > 解决方案 > PostgreSQL - 如何获取按两列分组的数据?

问题描述

例如,我想计算某个 IP 和日期范围的 IP 地址数where date = 2017-12-01 and IP = '122.12.168.105'

我希望得到 3 列:日期、日期的 IP 计数和 IP 本身:

|    the_date  |count|       IP        |
|   2017-12-01 | 155 | 122.12.168.105  |

现在我想出了以下查询:

SELECT COUNT(ip), ip 
FROM my_db.logs
GROUP BY ip 
LIMIT 100; 

但它只为我返回每个 IP 的计数。我如何也按日期分组?

当我尝试在SELECT语句中添加日期时,会出现一个错误,指出 the_date 必须在GROUP_BY子句中。但是我应该如何对 IP 进行分组呢?

标签: sqlpostgresql

解决方案


添加the_date到分组语句中:

SELECT the_date, COUNT(1), ip 
FROM my_db.logs
GROUP BY the_date, ip
LIMIT 100;

如果列名是date(not the_date),则必须使用双引号,因为date它是保留字

SELECT "date", COUNT(1), ip 
FROM my_db.logs
GROUP BY "date", ip
LIMIT 100;

推荐阅读