【问题标题】:Count each unique values计算每个唯一值
【发布时间】:2020-10-06 11:36:32
【问题描述】:

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

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    您想显示所有行(无聚合)。您想显示一个带有聚合的附加列。您可以在子查询中进行此聚合。

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

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 2023-04-06
      • 2016-09-02
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2021-03-16
      • 2018-07-30
      相关资源
      最近更新 更多