关于 group by 分组字段的 使用总结 mysql sql

  • Post author:
  • Post category:mysql


关于 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;

在这里插入图片描述

得出结果:

在这里插入图片描述



版权声明:本文为hadu_kaka原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。