我尝试按grade_level选择最大列。如果我选择了一个小于最大列的列,则不应选择grade_level。
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_level
作为2
放在我的WHERE CLAUSE
中,它会给我一个正确的价值。但是,如果我将grade_level
设为1
,那么如何避免选择其他列,因为我只选择了最大列。
答案 0 :(得分:0)
像这样简单的东西会起作用:
select name, max(money)
from sample
group by grade_level
在GROUP BY子句中使用grade_level而不是名称
答案 1 :(得分: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