关于 group by 分组字段的 使用总结 mysql sql
一张剧目演出表,表中有(剧目ID,剧目名称,演出单位,票房),
问:查询出每个演出单位票房最高的剧目名称。
网上看的的题 [原文地址]
https://blog.csdn.net/jessica__sun/article/details/79771263
但是:其实 oracle 数据库在使用 group by 分组字段后 ,select可以查询显示的 只能是 分组字段 或 聚合函数(
分析函数也不行
)
所以 执行是会报错的。
题目还是很好的 下面是我写的解答,如果有错误, 也请大家指正,感谢!
发现图片不是很清晰 重新截图了 等同于上面的图
mysql 数据库
出现这种错误的原因 select 查询返回的字段(name)不包括在group by
分组字段内
!
以下 oracle 数据库
发现图片不是很清晰 重新截图了 等同于上面的图
实现:
–方法一 关联子查询
SELECT S.name
FROM SHOW_PLAN S
WHERE PRICE IN (SELECT MAX(PRICE) FROM SHOW_PLAN WHERE S.DESP = DESP);
–方法二 根据group by 只取分组的第一条特性
SELECT NAME
FROM SHOW_PLAN
WHERE (PRICE, DESP) IN (SELECT MAX(PRICE), A.DESP
FROM (SELECT * FROM SHOW_PLAN ORDER BY PRICE DESC) A
GROUP BY A.DESP);
–方法三 分析函数 oracle独有
SELECT A.NAME
FROM (SELECT S.*,
ROW_NUMBER() OVER(PARTITION BY DESP ORDER BY PRICE DESC) RN
FROM SHOW_PLAN S) A
WHERE RN = 1;
得出结果: