简体   繁体   English

如何在 mysql 中创建按日期分组的值计数?

[英]How to create a count of values in mysql grouped by date?

I have a table called users with columns infected (0 || 1 || NULL) and date_checkin (mysql timestamp), absence (0 || 1 || NULL).我有一个名为users的表,其中列infected (0 || 1 || NULL) 和date_checkin (mysql 时间戳), absence (0 || 1 || NULL)。

I want to create a statistic, where I can see, how many guests have the infected value 0, 1 or Zero, same for absence grouped by the date.我想创建一个统计数据,我可以在其中看到有多少客人的infected值为 0、1 或零,对于按日期分组的absence也是如此。

Currently I have the amount of guests:目前我有客人数量:

select count(`id`), date(`date_checkin`) as day
from `users` 
group by day

I want my result to look like我希望我的结果看起来像

| all | infected | not infected | not tested | absence | not absence |     day    |
|  10 |    5     |       2      |     1      |    2    |      0      | 2021-05-26 |
| ....
  • infected 1 = infected感染 1 = 感染
  • infected 0 = not infected感染 0 = 未感染
  • infected NULL = not tested受感染的 NULL = 未测试
  • absense 1 = absence缺席 1 = 缺席
  • absence 0 = not absence缺席 0 = 不缺席
  • absence NULL = this value does not matter缺席 NULL = 这个值无关紧要

Here is some sample data:以下是一些示例数据:

|  id  |  date_checkin         | inf.  |  abs.    |
---------------------------------------------------
|  42  |  2021-05-04 23:20:11  |  0    |   NULL   |
|  43  |  2021-05-04 23:20:14  |  0    |   NULL   |
|  44  |  2021-05-04 23:20:18  |  NULL |   1      |
|  45  |  2021-05-04 23:20:21  |  NULL |   1      |
|  46  |  2021-05-04 23:20:24  |  1    |   NULL   |
|  47  |  2021-05-04 23:20:28  |  0    |   NULL   |
|  48  |  2021-05-04 23:20:31  |  0    |   NULL   |
|  49  |  2021-05-04 23:20:34  |  1    |   NULL   |
|  50  |  2021-05-05 07:55:15  |  0    |   NULL   |
|  51  |  2021-05-05 11:56:41  |  NULL |   1      |
|  52  |  2021-05-05 12:55:12  |  0    |   NULL   |
|  53  |  2021-05-09 11:13:12  |  NULL |   1      |
|  54  |  2021-05-17 17:33:52  |  0    |   NULL   |
|  55  |  2021-05-17 17:34:42  |  0    |   NULL   |
|  56  |  2021-05-18 11:12:31  |  0    |   NULL   |
|  57  |  2021-05-18 15:09:36  |  0    |   NULL   |
|  58  |  2021-05-18 15:20:59  |  0    |   NULL   |
|  59  |  2021-05-18 15:21:16  |  0    |   NULL   |
|  62  |  2021-05-18 15:25:40  |  0    |   NULL   |
|  63  |  2021-05-18 15:29:33  |  0    |   NULL   |
|  64  |  2021-05-18 16:02:02  |  0    |   NULL   |
|  65  |  2021-05-18 16:07:33  |  1    |   NULL   |
|  66  |  2021-05-18 16:07:51  |  0    |   NULL   |
|  67  |  2021-05-18 16:09:28  |  NULL |   1      |
|  68  |  2021-05-18 16:12:12  |  NULL |   1      |
|  69  |  2021-05-18 16:12:31  |  NULL |   1      |
|  70  |  2021-05-18 16:12:54  |  NULL |   1      |
|  71  |  2021-05-18 16:22:03  |  NULL |   1      |
|  72  |  2021-05-18 16:22:26  |  NULL |   1      |
|  73  |  2021-05-19 11:04:27  |  NULL |   1      |
|  79  |  2021-05-19 12:27:31  |  NULL |   1      |
|  80  |  2021-05-21 14:28:19  |  NULL |   1      |
|  81  |  2021-05-21 14:28:30  |  NULL |   1      |
|  82  |  2021-05-21 14:34:39  |  0    |   NULL   |
|  83  |  2021-05-21 14:35:47  |  NULL |   1      |
|  84  |  2021-05-21 14:36:54  |  NULL |   1      |
|  85  |  2021-05-21 14:38:26  |  0    |   NULL   |
|  86  |  2021-05-21 14:39:38  |  0    |   NULL   |
|  87  |  2021-05-21 14:39:39  |  0    |   NULL   |
|  88  |  2021-05-21 14:39:39  |  0    |   NULL   |
|  89  |  2021-05-21 14:39:42  |  0    |   NULL   |

You can use below query:您可以使用以下查询:

SELECT 
    COUNT(`id`) AS counts,
    SUM(CASE WHEN infected = '1' THEN 1 ELSE 0 END) AS infected,
    SUM(CASE WHEN infected = '0' THEN 1 ELSE 0 END) AS not_infected, 
    SUM(CASE WHEN infected IS NULL THEN 1 ELSE 0 END) AS not_tested,
    SUM(CASE WHEN absence = '1' THEN 1 ELSE 0 END) AS absence,
    SUM(CASE WHEN absence = '0' THEN 1 ELSE 0 END) AS not_absence,
    DATE(`date_checkin`) AS selected_day
FROM 
    users
GROUP BY 
    selected_day;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM