访问查询分组/总和
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 ... 这行得通,但仍然对更好的解决方案持开放态度。
【讨论】:
以上是关于访问查询分组/总和的主要内容,如果未能解决你的问题,请参考以下文章
MySQL按查询分组,多个总和不使用索引,滞后于使用文件排序