相关的文档10bet官方网站 本手册下载 本手册摘录

MySQL 8.0参考手册// 包含某个列的组级最大值的行

3.6.4某列的组最大行数

任务:针对每一件商品,找到价格最高的经销商。

这个问题可以通过像这样的子查询来解决:

SELECT MAX(s2.price) FROM s1 WHERE price=(SELECT MAX(s2.price) FROM s1article = s2.article) ORDER BY article;+---------+--------+-------+ | 文章| |经销商价格  | +---------+--------+-------+ | 0001 B | | 3.99 | | 0002 | | 10.99 | | 0003 | | 1.69加元| | 0004 | | 19.95  | +---------+--------+-------+

前面的示例使用了一个相关的子查询,可能效率不高(参见第13.2.11.7节,“相关子查询”)。类中使用不相关的子查询是解决该问题的其他可能性条款,左连接,或带有窗口函数的公共表表达式。

不相关子查询:

选择s1。文章中,经销商,s1。(SELECT price FROM shop GROUP BY article, MAX(price) AS price FROM shop GROUP BY article)文章= s2。文章和s1。价格= s2。按商品订购;

左连接:

选择s1。篇文章,s1.dealer, s1。商店s1左连接商店s2在s1上。文章= s2。文章和s1。价格< s2。价格在s2。article IS NULL ORDER BY s1.article;

左连接工作的基础上,当s1.price在它的最大值,没有s2.price具有较大的值,因而相应s2.article值是。看到第13.2.10.2条,“加入条款”

带有窗口函数的常用表表达式:

与s1(选择文章、经销商价格,排名()/(分区通过条订单价格DESC)从商店)“排名”选择文章,经销商,价格从s1“排名”= 1条顺序;