gpt4 book ai didi

sql - 获取 sql 表列中唯一组合的计数

转载 作者:行者123 更新时间:2023-11-29 14:37:11 27 4
gpt4 key购买 nike

假设您有一个包含以下列和 100,000 行的顾客表的数据库:

CREATE TABLE patron (
id INT,
name VARCHAR(100),
deptA INT,
deptB INT,
deptC INT
);

一些示例行如下:

+----+------+-------+-------+-------+
| id | name | deptA | deptB | deptC |
+----+------+-------+-------+-------+
| 1 | Bob | 1 | 1 | NULL |
| 2 | Bill | NULL | 2 | NULL |
| 3 | Mike | 3 | NULL | NULL |
| 4 | John | 4 | 4 | 4 |
| 5 | Matt | NULL | NULL | 5 |
| 6 | Jack | 6 | 6 | NULL |
| 7 | Sean | 7 | 7 | 7 |
| 8 | Adam | 8 | 8 | 8 |
+----+------+-------+-------+-------+

我想要一个这样的表(A = 仅部门 A,B = 仅部门 B,C = 仅部门 C,AB = 部门 A 和 B,等等):

+-----------+------------+
| Department| User Count |
+-----------+------------+
| A | 40,121 |
| B | 25,663 |
| C | 13,925 |
| AB | 6,253 |
| AC | 5,870 |
| BC | 5,123 |
| ABC | 3,045 |
+-----------+------------+

如果某个部门的值为 NULL,则该人将被视为不属于该部门。例如,如果我只是 A 部门的一部分,则 A 部门的值将是我的 id 值,而 B 部门和 C 部门的值将是 NULL。

执行此操作的 SQL 查询是什么?我不知道如何找到独特的(不同的)组合并使它们成为自己的专栏。

最佳答案

您应该使用单个聚合来执行此操作:

select concat_ws(',',
(case when deptA > 0 then 'A' end),
(case when deptB > 0 then 'B' end),
(case when deptC > 0 then 'C' end)
) as Department
count(*)
from patron
group by Department
order by length(Department), Department;

关于sql - 获取 sql 表列中唯一组合的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568862/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com