在MySQL數據庫中,我們經常需要對多個列中的數值進行一些計算操作,比如求最小值、最大值、平均值等等。如果我們只需要對單個列中的數據進行計算,可以使用MIN()和MAX()函數;但如果需要對多個值進行計算,我們需要借助子查詢和聯合查詢來實現。
-- 例子表格結構 CREATE TABLE scores ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20), subject VARCHAR(20), score INT ); -- 示例數據 INSERT INTO scores(name, subject, score) VALUES('小明', '語文', 87), ('小明', '數學', 92), ('小明', '英語', 80), ('小李', '語文', 75), ('小李', '數學', 85), ('小李', '英語', 90), ('小紅', '語文', 91), ('小紅', '數學', 88), ('小紅', '英語', 96);
假設我們需要求出每個學生的最低成績,我們可以使用子查詢來實現:
SELECT name, MIN(score) AS min_score FROM scores GROUP BY name;
上述查詢會返回每個學生的最低成績,例如:
+-------+-----------+ | name | min_score | +-------+-----------+ | 小明 | 80 | | 小李 | 75 | | 小紅 | 88 | +-------+-----------+
如果我們需要求出每個學生的最低成績所屬的學科,可以使用聯合查詢來實現:
SELECT name, subject, score FROM scores WHERE (name, score) IN ( SELECT name, MIN(score) FROM scores GROUP BY name );
上述查詢會返回每個學生最低成績所屬的學科,例如:
+-------+---------+-------+ | name | subject | score | +-------+---------+-------+ | 小明 | 英語 | 80 | | 小李 | 語文 | 75 | | 小紅 | 數學 | 88 | +-------+---------+-------+
在實際使用中,我們需要根據具體的需求選擇不同的查詢方法以提高SQL的效率和可讀性。