[英]Display column values and their count on SQL
我只想问你关于SQL的这个问题。
让我们考虑一下这个EMPLOYEE表:
Employee Department
A 10
A 10
A 11
A 12
B 13
B 13
我想要显示的是每个员工,所有不同的部门(没有重复)以及这些不同部门的总数。 所以,像这样:
Employee Department total_dept
A 10 3
A 11 3
A 12 3
B 13 1
如果可能的话,我甚至会喜欢这样的东西:
Employee Department total_dept
A 10 3
A 11 null
A 12 null
B 13 1
我有一个非常大的表(有很多列和许多数据)所以我认为这可以是一个“优化”,不是吗? 我的意思是,不需要在所有行中存储total_dept。 只要它就足够了。 没问题,如果在此之后我将列留空了。 但我不知道是否可以在SQL中执行此类操作。
那么,我该如何解决这个问题呢? 我试过但似乎不可能将count(列)与同一列结合起来......
先感谢您
这可能就是你要找的东西
SELECT
emp,
dept,
(select count(distinct dept) from TB as tbi where tb.emp = tbi.emp ) x
FROM TB
group by emp, dept;
MySQL 8.0支持窗口COUNT
:
SELECT *,COUNT(*) OVER (PARTITION BY Employee) AS total_dept
FROM (SELECT DISTINCT * FROM Employees) e
你甚至可以有第二个结果(我建议将演示文稿内容留给apllication层):
SELECT *, CASE WHEN ROW_NUMBER() OVER(PARTITION BY Employee ORDER BY Department) = 1
THEN COUNT(*) OVER (PARTITION BY Employee) END AS total_dept
FROM (SELECT DISTINCT * FROM Employees) e
ORDER BY Employee, Department;
对于第二个版本:
SELECT
DISTINCT e.Employee, e.Department,
CASE
WHEN e.Department =
(SELECT MIN(Department) FROM Employees WHERE Employees.Employee = e.Employee)
THEN
(SELECT COUNT(DISTINCT Department) FROM Employees WHERE Employees.Employee = e.Employee)
END AS total_dept
FROM Employees e
ORDER BY e.Employee, e.Department;
看演示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.