首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 常用查詢範例集:從最大值到分組統計的實戰技巧

     編輯:MySQL 資料庫相關知識

前言

本文採用官方經典 shop 範例資料表(商品價格比價),展示解決常見查詢問題的多種寫法與技巧對比。

一、範例資料準備

CREATE TABLE shop (
    article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
    dealer  CHAR(20) DEFAULT '' NOT NULL,
    price   DOUBLE(16,2) DEFAULT '0.00' 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);

資料內容:

articledealerprice
0001A3.45
0001B3.99
0002A10.99
0003B1.45
0003C1.69
0003D1.25
0004D19.95

二、查詢「最大商品編號」

SELECT MAX(article) AS article FROM shop;

結果:4

三、查詢「擁有最大價格的記錄」

方法 1:子查詢(ANSI SQL 標準,MySQL 4.1+ 支援)

SELECT article, dealer, price
FROM shop
WHERE price = (SELECT MAX(price) FROM shop);

方法 2:兩步驟法(舊版 MySQL 無子查詢時)

  1. 先查最大值:SELECT MAX(price) FROM shop; → 19.95
  2. 再查符合條件:SELECT article, dealer, price FROM shop WHERE price = 19.95;

方法 3:排序 + LIMIT(MySQL 特有,最簡潔)

SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;

注意: 若有多筆相同最高價,LIMIT 1 僅回傳其中一筆。

四、分組統計:各商品最高價格

SELECT article, MAX(price) AS price
FROM shop
GROUP BY article;

結果:

articleprice
00013.99
000210.99
00031.69
000419.95

五、進階:各商品最低價的經銷商

SELECT s1.article, s1.dealer, s1.price
FROM shop s1
JOIN (
    SELECT article, MIN(price) AS min_price
    FROM shop
    GROUP BY article
) s2 ON s1.article = s2.article AND s1.price = s2.min_price;

六、技巧總結

需求推薦寫法備註
單一極值ORDER BY ... LIMIT 1最簡潔,注意平手情況
極值對應完整列子查詢 / JOIN 衍生表標準 SQL,相容性佳
分組極值GROUP BY + 聚合函數基礎分組統計
分組極值對應詳細資訊JOIN 衍生表 / 窗口函數 (8.0+)進階分析常用

小結

掌握 MAX/MIN、GROUP BY、LIMIT、子查詢與 JOIN 的組合運用,能解決 90% 的極值與分組統計問題。MySQL 8.0 引入窗口函數後,寫法更優雅高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved