计算每个唯一值

时间:2020-06-16 18:54:17

标签: sql ms-access

我在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(即使是重复值的行)。

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的行(行本身)。