場景:shop(article, dealer, price),每種圖書 (article) 找出最高價格的經銷商 (dealer)。
CREATE TABLE shop (
article INT(4) UNSIGNED ZEROFILL NOT NULL,
dealer CHAR(20) NOT NULL,
price DOUBLE(16,2) NOT NULL,
PRIMARY KEY (article, dealer)
);
INSERT INTO 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, MAX(price) FROM shop GROUP BY article;
SELECT article, MAX(price), dealer FROM shop GROUP BY article;
-- 結果 dealer 可能非最高價對應 (如 article=1 顯示 A 而非 B)
SELECT article, dealer, price FROM shop s1
WHERE price = (SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article);
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
JOIN (
SELECT article, MAX(price) AS price FROM shop GROUP BY article
) s2 ON s1.article = s2.article AND s1.price = s2.price;
寫法 3、4 正確輸出:
1 B 3.99, 2 A 10.99, 3 C 1.69, 4 D 19.95
ROW_NUMBER() OVER (PARTITION BY article ORDER BY price DESC) 最優雅