如何显示列名和嵌套聚合结果
我想要做一个嵌套聚合,我可以选择聚集嵌套平均聚合的最大值,最小值或平均值。如何显示列名和嵌套聚合结果
我希望我的结果是这样的:(流派,MAX或MIN或嵌套AVG的AVG)
目前我有一个嵌套的聚集查询只返回一个流派的最高均价,但我可以似乎也不会选择对应于该最大值的流派。
考虑表游戏(游戏ID,游戏名称,流派,价格),无视游戏ID和游戏名称。
嵌套查询我现在所拥有的:此查询的
SELECT MAX(avggenreprice) AS maxavg
FROM (
SELECT genre as subgenre, AVG(price) as avggenreprice
FROM games
GROUP BY
subgenre
) AS sub;
结果举例:
|maxavg|
| 368.22|
我希望它看起来像这样
| genre | maxavg |
| Racer | 368.22 |
我用尽:
SELECT sub.subgenre, MAX(avggenreprice) AS maxavg
FROM (
SELECT genre as subgenre, AVG(price) as avggenreprice
FROM games
GROUP BY
subgenre
) AS sub
;
但这只是给了我错误代码1140
SELECT subgenre, avggenreprice AS maxavg
FROM (
SELECT genre as subgenre, AVG(price) as avggenreprice
FROM games
GROUP BY
subgenre
) AS sub
ORDER BY avggenreprice DESC
Limit 1;
的1140码出现时MySQL是不知道如何处理聚合函数,需要一个明确的GROUP BY子句。参见(MySQL #1140 - Mixing of GROUP columns)。
您的情况最简单的解决方案是用排序DESC和限制1个子句替换集合函数max。
这将返回多行,这与仅运行内部聚合没有区别。这不工作:( – noobcoder
多数民众赞成在这是因为theres多个类型,你是在寻找与最高平均价格subgenre而不是 –
对不起,没有仔细阅读,上面编辑的代码应该给你想要的东西 –
只需使用ORDER BY
和LIMIT
。子查询是没有必要的:
SELECT genre as subgenre, AVG(price) as avggenreprice
FROM games
GROUP BY subgenre
ORDER BY avggenreprice DESC
LIMIT 1;
select top 1 subgenre AS genre , AVG (price) As maxavg from games
group by subgenre order by AVG (price) desc
谢谢你这个代码片段,这可能会提供一些即时帮助。通过显示*为什么*这是一个很好的解决方案,并且会提供一个合适的解释[将大大提高](// meta.stackexchange.com/q/114762)其教育价值使其对未来具有相似但不相同问题的读者更有用,请编辑您的答案以添加解释,并指出适用的限制和假设。 –
在你的外选择只需添加你想选择...所以只想补充一点,“流派”一栏,如果你想选择内选择,使用顶只是第一个结果1 – Veljko89
@ Veljko89我试过了,它给了我错误代码1140 – noobcoder