每組最大列-Maximum of Column per Group-數據庫面試題

數據庫面試題——打卡
數據庫查詢每組最大值:例如對於每門課程,查詢分數最高的學生。
這裏分享MySQL手冊中例子:For each article, find the dealer or dealers with the most expensive price。對於每篇文章,查詢價格最昂貴的經銷商。
在這裏插入圖片描述
建表添加記錄的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;

查詢結果
查詢結果
手冊裏說相關子查詢可能效率不高。可能與查詢指令執行順序有關。
在這裏插入圖片描述
摘自:https://dev.mysql.com/doc/refman/5.7/en/example-maximum-column-group-row.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章