mysql - 如何在具有多个条件的 MySql 中获取计数
问题描述
我有以下结构的架构。
测试表:
ID Date measurement
IT-1 2019-01-01 13:12:11 50
IT-2 2019-01-02 15:10:24 75
IT-3 2019-01-03 17:19:18 100
IT-4 2019-02-02 08:17:09 25
IT-5 2019-02-04 09:13:07 150
IT-6 2019-02-05 11:10:09 98
使用Test_Table
,我想在 MySql 中导出以下格式的输出。
我需要将条件放在measurement
列上,如果该列中的值小于或等于 50,而不是在输出的不同列中显示计数。其中月份可以从 Test_Table 的日期列中得出。
我曾尝试使用 case when 条件,但仍无法获得所需的输出。
例子:
Month Total_ID <=50 50-100 100-200
Jan-2019 3 1 2 0
Feb-2019 3 1 1 1
解决方案
您可以使用条件聚合:
SELECT
DATE_FORMAT(Date, '%b-%Y') As "Month",
COUNT(*) Total_ID,
SUM(measurement <= 50) AS "<= 50",
SUM(measurement > 50 AND measurement <= 100) AS "50-100",
SUM(measurement > 100 AND measurement <= 200) AS "100-200"
FROM mytable
GROUP BY DATE_FORMAT(Date, '%b-%Y')
| Month | Total_ID | <= 50 | 50-100 | 100-200 |
| -------- | -------- | ----- | ------ | ------- |
| Jan-2019 | 3 | 1 | 2 | 0 |
| Feb-2019 | 3 | 1 | 1 | 1 |
推荐阅读
- scala - scala中的无符号整数
- node.js - 为什么当我安装一个新的 npm 包时,我必须运行“docker-compose down”,然后运行“docker-compose up --build”?
- java - compareTo 用于字母数字顺序中的字符串问题
- sql - CASE 函数在 Access 查询中不起作用
- ios - 如何在collectionView中只重新加载一个单元格?
- r - 将函数参数作为存储在变量中的字符串传递
- selenium - 如何生成带有历史信息的诱惑报告。
- wso2 - 通过 API 创建外部权限并添加到 wso2 角色
- java - JAX-WS 更改或删除每个客户端实例的信任证书存储
- java - JDK 11 上的黄瓜