PostgreSQL中如何按指定类型统计两列的唯一值数量
解决方案
数据结构
原始数据表结构及示例数据如下:
| time | ID | ReQtype | ReqName |
|---|---|---|---|
| 1345 | 12 | 1 | test |
| 1346 | 13 | 2 | test |
| 1352 | 14 | 1 | hello world |
| 1352 | 15 | 3 | fith |
| 1354 | 16 | 1 | hello world |
| 1357 | 17 | 4 | apple |
需求说明
在指定时间范围(例如最近30分钟)内,获取两个统计结果:
- 按
ReqName分组的请求计数 - 按
ReqType分组的请求计数
实现方式
方式1:执行两个独立查询(推荐,结果清晰)
两个查询逻辑独立,返回结果分别对应需求中的两个统计表格:
查询1:按ReqName统计
SELECT COUNT(ID) AS count, ReqName FROM your_table_name WHERE time >= NOW() - INTERVAL 30 MINUTE -- 替换为你的时间范围条件 GROUP BY ReqName ORDER BY count DESC;
返回结果示例:
| count | ReqName |
|---|---|
| 2 | test |
| 2 | hello world |
| 1 | fith |
| 1 | apple |
查询2:按ReqType统计
SELECT COUNT(ID) AS count, ReqType FROM your_table_name WHERE time >= NOW() - INTERVAL 30 MINUTE -- 替换为你的时间范围条件 GROUP BY ReqType ORDER BY count DESC;
返回结果示例:
| count | ReqType |
|---|---|
| 3 | 1 |
| 1 | 2 |
| 1 | 3 |
| 1 | 4 |
方式2:合并为单个查询结果(带统计类型标识)
如果需要一次查询获取所有统计数据,可通过UNION ALL合并结果,新增字段区分统计类型:
SELECT 'ReqName' AS stat_type, COUNT(ID) AS count, ReqName AS group_value FROM your_table_name WHERE time >= NOW() - INTERVAL 30 MINUTE GROUP BY ReqName UNION ALL SELECT 'ReqType' AS stat_type, COUNT(ID) AS count, CAST(ReqType AS CHAR) AS group_value FROM your_table_name WHERE time >= NOW() - INTERVAL 30 MINUTE GROUP BY ReqType ORDER BY stat_type, count DESC;
返回结果示例:
| stat_type | count | group_value |
|---|---|---|
| ReqName | 2 | test |
| ReqName | 2 | hello world |
| ReqName | 1 | fith |
| ReqName | 1 | apple |
| ReqType | 3 | 1 |
| ReqType | 1 | 2 |
| ReqType | 1 | 3 |
| ReqType | 1 | 4 |
注意事项
- 替换
your_table_name为实际表名 - 时间条件需根据数据库类型调整:MySQL用
NOW() - INTERVAL 30 MINUTE,PostgreSQL用CURRENT_TIMESTAMP - INTERVAL '30 minutes',SQL Server用DATEADD(MINUTE, -30, GETDATE())
内容的提问来源于stack exchange,提问作者AH101
相关产品推荐
相关产品推荐

