如何显示列名和嵌套聚合结果

问题描述:

我想要做一个嵌套聚合,我可以选择聚集嵌套平均聚合的最大值,最小值或平均值。如何显示列名和嵌套聚合结果

我希望我的结果是这样的:(流派,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

+2

在你的外选择只需添加你想选择...所以只想补充一点,“流派”一栏,如果你想选择内选择,使用顶只是第一个结果1 – Veljko89

+0

@ Veljko89我试过了,它给了我错误代码1140 – noobcoder

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。

+0

这将返回多行,这与仅运行内部聚合没有区别。这不工作:( – noobcoder

+0

多数民众赞成在这是因为theres多个类型,你是在寻找与最高平均价格subgenre而不是 –

+0

对不起,没有仔细阅读,上面编辑的代码应该给你想要的东西 –

只需使用ORDER BYLIMIT。子查询是没有必要的:

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 
+1

谢谢你这个代码片段,这可能会提供一些即时帮助。通过显示*为什么*这是一个很好的解决方案,并且会提供一个合适的解释[将大大提高](// meta.stackexchange.com/q/114762)其教育价值使其对未来具有相似但不相同问题的读者更有用,请编辑您的答案以添加解释,并指出适用的限制和假设。 –