SQL中存在兩個max條件的查詢語句


  前段時間找工作參加筆試,筆試題中有一道sql查詢語句,條件是兩個字段都是最大值,第一直覺是兩個字段(例如age、hight)都等於max(),用一個行子查詢就行了。第二直覺又不是,如果表中恰好有一條age=max(age),hight=max(hight)的數據,行子查詢是沒問題的。但是如果age=max(age)的數據hight!=max(hight)並且hight=max(hight)的數據age=!max(age)呢?那么查出來的結果必然是空。

  我想首先保證age=max(age),在age=max(age)的記錄里查詢hight=max(hight)的記錄,這樣應該能滿足題意了吧?(后來我在其他地方看的題目好像就是要求第一直覺的那樣0.0)然后呢?后面就復雜了,查詢語句一層一層的嵌套......最后只是大致的草稿出來了,但是筆試時間到,面試官說算了,筆試題不重要......

  今天又看到這個問題的一個例子(他是用行子查詢做的),就把這個問題解決了。

mysql> create table maxtest(age int,hight int);
Query OK, 0 rows affected (0.27 sec)

mysql> insert into maxtest values(30,180);
Query OK, 1 row affected (0.05 sec)
mysql> insert into maxtest values(30,173);
Query OK, 1 row affected (0.06 sec)
mysql> insert into maxtest values(32,193);
Query OK, 1 row affected (0.06 sec)
mysql> insert into maxtest values(23,199);
Query OK, 1 row affected (0.06 sec)

mysql> select * from maxtest;
+------+-------+
| age  | hight |
+------+-------+
|   30 |   180 |
|   30 |   173 |
|   32 |   193 |
|   23 |   199 |
+------+-------+
4 rows in set (0.00 sec)

mysql> select * from maxtest where (age,hight)=(select max(age),max(hight) from maxtest);
Empty set (0.00 sec)

mysql> select * from maxtest where hight=(select max(hight) from (select * from maxtest where age=(select max(age) from maxtest)) a);
+------+-------+
| age  | hight |
+------+-------+
|   32 |   193 |
+------+-------+
1 row in set (0.00 sec)

  java jdbc查詢10000次:useTime=22988、24231

  另外一種寫法:

select * from maxtest where age=(select max(age) from maxtest) and hight=(select max(hight) from (select max(age) from maxtest) a);

  這種寫法可能更容易理解一些

  java jdbc查詢10000次:useTime=20527、***


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM