在MySQL中聚合一个简单的COUNT

时间:2018-06-21 00:05:08

标签: mysql sql

我正在制定一个MySQL查询,尝试汇总一个COUNT。 数据看起来像这样。...表是“工人”

   NAME      DPT
   -----     ----
   CLARK     10
   JAMES     10
   ALLEN     10
   ADAMS     20
   WU        20
   MARTIN    30
   FITZ      30
   SCHMIDT   30
   MILLER    30

我需要在部门中列出这样的表格

   NAME      DPT   CNT
   -----     ----   ---
   CLARK     10     3
   JAMES     10     3
   ALLEN     10     3
   ADAMS     20     2
   WU        20     2
   MARTIN    30     4
   FITZ      30     4
   SCHMIDT   30     4
   MILLER    30     4

我尝试过了...

SELECT DISTINCT(NAME), DPT, COUNT(DPT) as CNT FROM workers GROUP BY DPT;

没有成功。可以肯定这很简单,但是我很困惑。关于我要去哪里的任何想法? -JW

3 个答案:

答案 0 :(得分:2)

由于计数汇总位于DPT字段上,因此您只需要对此子查询,然后与workers表联接以获取名称。

SELECT w.NAME, w.DPT, tot.CNT
FROM workers AS w JOIN (SELECT DPT, COUNT(1) AS CNT FROM workers GROUP BY DPT) AS tot ON w.DPT = tot.DPT 
ORDER BY w.DPT, w.NAME;

答案 1 :(得分:0)

分组时,将汇总该字段下的所有行。因此,您将仅获得DPT每个不同值的行。

您可以使用子查询来获取相同DPT值的计数。

SELECT NAME, DPT, (SELECT COUNT(*) FROM workers w2 WHERE w2.DPT = workers.DPT) as CNT
FROM workers;

答案 2 :(得分:0)

您可以使用窗口式COUNT(MySQL 8.0及更高版本):

SELECT *, COUNT(*) OVER(PARTITION BY dpt) AS cnt
FROM workers;

DBFiddle Demo