假设我有一个结构类似的表
名称 | 得分 |
---|---|
Mike | 40 |
Mike | 79 |
Mike | 49 |
不知道为什么其他答案会使事情复杂化,你只想使用max函数,比如:
WITH data(name, score) as (
select * from values
('Mike', 40),
('Mike', 79),
('Mike', 79)
)
select name, max(score) as score
from data
where name ='Mike' group by name;
与您的查询:
SELECT Name, COUNT(*), max(Score) FROM
table GROUP BY Name
CCD_ 1是"1";类似的";从功能的角度来看,对max来说,但正如您所提到的,它不起作用,这是因为它的签名——它不意味着接收单个expr作为输入。我建议你阅读max和great之间的区别,以确保你完全理解它们。
使用QUALIFY和RANK/ROW_NUMBER:
SELECT *
FROM tab
QUALIFY RANK() OVER(PARTITION BY Name ORDER BY Score DESC) = 1
长格式解释:
如果你添加一个ROW_NUMBER和一个RANK到更改的数据:
WITH data(name, score, extra) as (
select * from values
('Mike', 40, 'a'),
('Mike', 79, 'b'),
('Mike', 79, 'c')
)
select *
,row_number() over (partition by name order by score desc) as rn
,rank() over (partition by name order by score desc) as rank
from data;
NAME | 分数 | EXTRARN | RANK |
---|---|---|---|
Mike | 79 | b | <1><1>1|
Mike | 79 | c | 2 | <1>
Mike | 40 | a | 3 |