想像一下我在表1中有以下数据:
ID Color Toy
1 Red Car
2 Red Truck
3 Red Truck
4 Blue Car
5 Blue Car
6 Yellow Airplane
而且我想返回每种颜色的最频繁玩具的最大数量。我该怎么做?
我已经尝试过
SELECT aa.color, aa.toy, max(aa.totalcount) AS maxcount
FROM (
Select Color, Toy, count(*) AS totalcount
FROM Table 1 GROUP BY Color, Toy
) aa;
由于某种原因,这似乎不起作用。我在做什么错?
这是我得到的错误:
在SELECT子句,HAVING子句或ORDER BY子句中指定的以“ Color”开头的表达式未在GROUP BY子句中指定,或者在SELECT子句,HAVING子句或ORDER BY子句中具有列函数,并且没有指定GROUP BY子句。SQLCODE= -119,SQLSTATE = 42803,DRIVER = 4.25.1301
我想要的期望输出是每种颜色的玩具中最常见的一行,以及玩具/颜色组合的数量:
红色卡车2(非红色汽车)
蓝色汽车2
黄色飞机1
如果使用的是MSSQL,则此查询的GROUP BY和ROW_NUMBER()应该可以解决您的问题。您也可以对其他数据库使用相同的逻辑。
WITH CTE AS(
SELECT Color,Toy,T Total,
ROW_NUMBER() OVER(PARTITION BY Color,Toy ORDER BY T DESC) RN
FROM(
SELECT color,toy,count(*) T
FROM your_table
GROUP BY color,toy
) A
)
SELECT * FROM CTE WHERE RN = 1