首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle SQL 查詢:年齡大於女生最大年齡的所有男生資料

     編輯:程式設計疑難解答

需求

資料表 students 欄位:id, name, sex, age。查詢所有年齡 > 女生最大年齡的男生。

標準 SQL 寫法

SELECT *
FROM students
WHERE sex = '男'
  AND age > (SELECT MAX(age) FROM students WHERE sex = '女');

執行邏輯

  1. 子查詢 SELECT MAX(age) FROM students WHERE sex = '女' 先執行,得到女生最大年齡(如 22)。
  2. 主查詢篩選 sex = '男' 且 age > 22 的記錄。

進階:使用分析函數(Oracle 8i+)

SELECT *
FROM (
    SELECT *,
           MAX(CASE WHEN sex = '女' THEN age END) OVER () AS max_girl_age
    FROM students
)
WHERE sex = '男' AND age > max_girl_age;

適合需同時顯示女生最大年齡作為參考欄位的報表。

效能建議

  • 在 sex, age 上建立複合索引:CREATE INDEX idx_sex_age ON students(sex, age);
  • 資料量大時,子查詢僅掃描女生分區,效率極高。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved