每组最大列-Maximum of Column per Group-数据库面试题

数据库面试题——打卡
数据库查询每组最大值:例如对于每门课程,查询分数最高的学生。
这里分享MySQL手册中例子:For each article, find the dealer or dealers with the most expensive price。对于每篇文章,查询价格最昂贵的经销商。
每组最大列-Maximum of Column per Group-数据库面试题_第1张图片
建表添加记录的SQL语句

create table shop (article int, dealer char(1), price numeric(6,2));
insert shop values(1, 'A', 3.45), (1, 'B', 3.99), (2, 'A', '10.99'), (3, 'B', 1.45), (3, 'C', 1.69), (3, 'D', 1.25), (4, 'D', 19.95);

三种方法

  • 相关子查询
SELECT article, dealer, price
FROM   shop s1
WHERE  price=(SELECT MAX(s2.price)
              FROM shop s2
              WHERE s1.article = s2.article)
ORDER BY article;
  • 不相关子查询
SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
  SELECT article, MAX(price) AS price
  FROM shop
  GROUP BY article) AS s2
  ON s1.article = s2.article AND s1.price = s2.price
ORDER BY article;
  • 左连接
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL
ORDER BY s1.article;

查询结果
每组最大列-Maximum of Column per Group-数据库面试题_第2张图片
手册里说相关子查询可能效率不高。可能与查询指令执行顺序有关。
每组最大列-Maximum of Column per Group-数据库面试题_第3张图片
摘自:https://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html

你可能感兴趣的:(数据库,求职,mysql,数据库)