我在MS-Access中使用SQL。我想计算表格中 code 列中的每个唯一值。
那是我的桌子:
| **code** | **description** | **date** | **level** |
| AAA | example | 01/01/2020 | x |
| AAA | example | 02/05/2020 | z |
| BBB | example | 09/09/2020 | y |
| CCC | example | 12/10/2020 | z |
预期结果:
| **code** | **description** | **date** | **level** | **count** |
| AAA | example | 01/01/2020 | x | 2 |
| AAA | example | 02/05/2020 | z | 2 |
| BBB | example | 09/09/2020 | y | 1 |
| CCC | example | 12/10/2020 | z | 1 |
我知道以下查询有效:
SELECT code, count(*) FROM table GROUP BY code;
但是我希望选择项计算 code 列,并同时显示所有其他列。我创建了此查询:
SELECT code, description, date, level, count(code)
FROM table
GROUP BY code, description, date, level;
但是它将“计数”列中的所有行显示为1(即使是重复值的行)。
答案 0 :(得分:3)
您要显示所有行(无聚合)。您想要显示带有聚合的其他列。您可以在子查询中进行此汇总。
SELECT
code, description, date, level,
(SELECT COUNT(*) FROM table AS t2 WHERE t2.code = t.code) AS code_count
FROM table AS t
ORDER BY code, date;
关于您自己的查询:您是伪聚合。由于所有行互不相同,因此您在所有列上的GROUP BY
保留原始行。然后计算在每个“组”中找到的总为1的行(行本身)。