MySQL 8.0发布说明
MySQL 8.0源码文档10bet官方网站
任务:针对每一件商品,找到价格最高的经销商。
这个问题可以通过像这样的子查询来解决:
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条顺序;