sql - 查找每个排列的匹配项数
问题描述
我正在尝试创建一个结果集,该结果集计算与多个类别的所有排列匹配的员工数量。这只是一个例子,因为真实的细节无法共享并且更复杂。
我有两个类别:性别和阶级。性别有男/女选项。类有 1/2/3 的选项。我使用如下交叉连接来查找这两个类别的所有六个排列(M/1、M/2、M/3、F/1、F/2、F/3)
WITH
cteGender AS (SELECT Gender FROM Genders),
cteClass AS (SELECT Class FROM Classes)
SELECT * FROM cteGender CROSS JOIN cteClass
接下来,我有一个包含以下列的员工列表:姓名、性别、班级。我的目标是创建一个结果集,显示性别和班级与排列集匹配的每个员工的计数,包括零计数。
像这样的东西:
Gender Class EmployeeCount
---------------------------------
M 1 0
M 2 3
M 3 1
F 1 0
...
等等。感谢您的任何帮助!
解决方案
你在路上。Across join
生成行。然后left join
引入数据并group by
聚合:
select g.gender, c.class, count(l.gender) as cnt
from genders g cross join
classes c left join
list l
on l.gender = g.gender and l.class = c.class
group by g.gender, c.class;
推荐阅读
- php - wp_script_add_data 不适用于异步延迟
- excel - 如何将单个单元格内容拆分为同一个单元格?
- html - Topnav 没有触及 HTML 的顶部
- javascript - 从 Angular 父组件传递到子组件的数据在子组件中未定义
- scala - 如何在Scala中否定模式匹配中的类型?
- python - 如何将图例添加到具有相同颜色的错误栏的图中
- reactjs - 在每个时间间隔更改文本 - React
- php - 如何在 laravel 的配置文件工厂中提供唯一的 user_id
- matlab - 将 UTC 时间转换为秒
- mysql - 存储过程中的错误 1064 在准备好的语句设置其值后检查局部变量是否为 NULL