我正在制定一个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
答案 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;