首页 > 解决方案 > 如何在具有多个条件的 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

标签: mysqldatabasedatecountpivot

解决方案


您可以使用条件聚合:

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')

DB Fiddle 上的演示

| Month    | Total_ID | <= 50 | 50-100 | 100-200 |
| -------- | -------- | ----- | ------ | ------- |
| Jan-2019 | 3        | 1     | 2      | 0       |
| Feb-2019 | 3        | 1     | 1      | 1       |

推荐阅读