2017-07-29 23 views
0

我想按grade_level只選最大列。如果我按照grade_level選擇小於max列的列,則不應選擇該列。只選最大列

CREATE TABLE sample 
(
name VARCHAR(50), 
grade_level INT, 
money INT 
); 

INSERT INTO sample (name, grade_level, money) VALUES  
("John", 1, 100), 
("John", 2, 200), 
("John", 2, 250), 
("Shadow", 1, 110), 
("Shadow", 2, 300); 

SELECT * FROM sample; 

name | grade_level | money 
John  1   100 
John  2   200 
John  2   250 
Shadow 1   110 
Shadow 2   300 

這是我迄今爲止在處理樣本時的示例查詢。

SELECT name 
    , max(money) 
    FROM sample 
WHERE grade_level = (SELECT max(grade_level) FROM sample WHERE grade_level = 2) 
GROUP BY name; 

輸出:

name | money 
John 250 
Shadow 110 

正如你可以在這裏看到,如果我把grade_level2WHERE CLAUSE它給了我一個正確的價值。但是,如果我將grade_level設置爲1,那麼如何避免選擇其他列,因爲我只選擇最大列。

+0

你似乎沒有PRIMARY KEY,這很有可能會成爲在適當的時候出現問題。 – Strawberry

+0

我想你對一行和一列之間的差異感到困惑。你期望的結果是什麼? – Strawberry

回答

0

一些簡單的像這樣將工作:

select name, max(money) 
from sample 
group by grade_level 

使用grade_level在GROUP BY子句中,而不是名稱

0

我認爲這你期待讓我知道,如果我錯了什麼

SELECT name, max(money),grade_level FROM sample 
GROUP BY name,grade_level; 

我爲你的答案創建了一個小提琴檢查出來:http://sqlfiddle.com/#!9/48022b/4

編輯:

試試這個:

SELECT name, max(money) FROM sample 
WHERE grade_level = (SELECT max(grade_level) FROM sample) 
and grade_level = 2 
GROUP BY name; 

檢查搗鼓更多信息http://sqlfiddle.com/#!9/48022b/11

+0

我只想用'max(grade_level)'來選擇最大列'max(money)',這是我做的。當我選擇小於'max(grade_level)'時應該給出一個空的選定行 – Francisunoxx

+0

,因爲我可以看到你只希望'grade_level = 2'的值有效,而且你希望'grade_level = 1的空集'如果tats你期望檢查我更新的答案 –