繁体   English   中英

显示列值及其在SQL上的计数

[英]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

db <>小提琴演示


你甚至可以有第二个结果(我建议将演示文稿内容留给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;

db <>小提琴演示

对于第二个版本:

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.

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