mysql - 多个语句的 SQL 多次计数赢得不同的列
问题描述
我正在寻找一种使用一个查询从表中获取多个计数的方法。我想获取使用特定终端以及授予状态的每个 USER_level(只有 3 个)的总数
桌子
CARD TERMINAL TRANSIT_DATE STATUS STR_DIRECTION USER_Level
12 D1 2019-12-02 07:12:30.000 Granted Exit level1
10 D1 2019-12-02 13:22:29.000 Granted Exit level3
11 D2 2019-12-02 17:09:05.000 Granted Exit level1
17 D2 2019-12-03 09:58:22.000 deny Entry level2
19 D3 2019-12-03 12:17:29.000 Granted Entry level2
32 D3 2019-12-03 13:48:33.000 Granted Exit level1
20 D2 2019-12-04 10:36:22.000 Granted Exit level3
11 D3 2019-12-07 22:01:41.000 Granted Exit level1
15 D2 2019-12-09 11:12:16.000 Granted Exit level2
14 D3 2019-12-10 06:32:22.000 Granted Entry level2
12 D2 2019-12-10 10:31:26.000 Granted Exit level1
39 D2 2019-12-11 06:42:08.000 Granted Exit level3
12 D2 2019-12-11 09:32:13.000 Granted Exit level1
11 D3 2019-12-11 12:44:36.000 Granted Exit level2
56 D2 2019-12-12 06:48:33.000 Granted Exit level2
78 D2 2019-12-12 12:03:23.000 Granted Entry level1
66 D3 2019-12-10 12:16:54.000 Granted Exit level3
22 D2 2019-12-09 16:02:02.000 Granted Exit level1
示例看起来像这样的结果
TERMINAL level 1 level 2 level 3
D1 1 1
D2 6 2 2
D3 2 3 1
...
解决方案
您可以尝试这样的事情,请注意,如果存在更多终端,则必须将它们添加到查询中。
select terminal,
sum(case when user_level = 'level1' then 1 else 0 end) as level1,
sum(case when user_level = 'level2' then 1 else 0 end) as level2,
sum(case when user_level = 'level3' then 1 else 0 end) as level3
from yourTable
where status = 'Granted'
and transit_date > your_initial_date
group by terminal
希望能帮助到你!
推荐阅读
- rust - 是否有以十六进制表示法声明字符文字的语法?
- amazon-web-services - AWS ECS TaskDefinition 自动扩展
- maven - 建议 maven 插件根据常规提交自动提升 project.version
- vue.js - 如何在 vuejs 中设置值选择加载页面
- sql - 如何将此 oracle 空间掩码转换为 st_relate postgis
- javascript - 如何对重复标签进行分组以便在chart.js中创建没有重复的标签
- r - R 的 `parallel::detectCores` 在 Linux 上检测物理内核
- winapi - 如何在 Outlook 2019 中隐藏搜索栏
- javascript - 我如何使用子进程调用依赖于nodejs中其他python脚本的python脚本
- mongodb - 支持 MongoDB 中跨所有字段的跨字段搜索 asterix