访问查询分组/总和

Posted

技术标签:

【中文标题】访问查询分组/总和【英文标题】:Access Query Grouping/Sum 【发布时间】:2015-10-29 20:58:45 【问题描述】:

我正在尝试创建每个年龄段的报告/查询。我当前的查询:

SELECT QUE_REP_GENERE_AGEGR.genere, QUE_REP_GENERE_AGEGR.age, Count(*) AS [count] FROM QUE_REP_GENERE_AGEGR
GROUP BY QUE_REP_GENERE_AGEGR.genere, QUE_REP_GENERE_AGEGR.age;

输出如下:(我知道类型拼写错误)

现在想总结年龄组,例如 0-9;10-19;20-29;... (是的,我知道目前只有一个年龄组的记录)

我曾尝试对报告使用分组功能,但没有成功,因为它没有总结类型,而是显示为

...
Drama  1
Horror 2
Horror 5
Musical 1
...

我该如何分组?我需要另一个查询还是可以在当前查询中分组? VBA 是一种选择吗?

【问题讨论】:

您需要定义年龄组,并确定每条记录属于哪个年龄组,然后按年龄组 而不是 age。这纯粹是关于你的数据的形状,我不认为 VBA 可以帮助你。 【参考方案1】:

我很久没有做过 MS-Access,但正如我评论的那样,你需要有一个“年龄组”的概念某处,并按此分组。

我强烈建议您在表中定义这些组,否则您的查询将不得不定义它们。我认为这样的事情会起作用(也许不是完全,但你明白了):

SELECT
     genere [Genre]
    ,AgeGroup
    ,COUNT(*) [Count]
FROM (
    SELECT
         genere
        ,CASE WHEN age < 10 THEN '0-9'
              WHEN age < 20 THEN '10-19'
              WHEN age < 30 THEN '20-29'
         END AgeGroup
     FROM QUE_REP_GENERE_AGEGR
    )
GROUP BY genere, AgeGroup

【讨论】:

按类别分组,年龄 / 10 @BerndBuffen 是否可以这样做,完全取决于组的定义方式。需求也会发生变化 - 有一天,您需要一个团队来 14-18,然后更改所需的工作量取决于您从一开始就构建事物的方式。 Bernd Buffens 和我的解决方案当然是快速解决方案,但我喜欢这个解决方案,因为它允许我更具体地定义年龄组。谢谢 刚刚注意到 SELECT CASE 语句不能在 MS Access 中使用!但是类似的switch statement可以用【参考方案2】:

我找到了一个解决方案:我刚刚做的是向下舍入到最接近的 10,以便 18 转为 10,45 转为 40 ... 这行得通,但仍然对更好的解决方案持开放态度。

【讨论】:

以上是关于访问查询分组/总和的主要内容,如果未能解决你的问题,请参考以下文章

Django:分组然后通过查询计算列值的总和

MySQL按查询分组,多个总和不使用索引,滞后于使用文件排序

将查询分组为 3 列,并在 Apex Oracle 中显示另一列的总和

没有分组的实体框架总和和平均值

聚合查询中由另一个字段分组的两个 int 数组的总和

在谷歌大查询中按未嵌套值分组时获取不同值的总和