如何在 MYSQL 中用 sum 过滤窗口函数?

如何编写此查询以仅过滤大于 50 的总和?我无法将其与 have 或 sum 结合使用,但我确定有某种方法。

select name,sum(score) 
    from submissions inner join hacker on submissions.hacker_id = hacker.hacker_id
    group by submissions.hacker_id
    order by sum(score) desc
    having sum(score) > 50 

摆弄表格在这里(它们没有什么异常,这个查询没有最后一行运行,但返回每个人的分数和姓名):http://sqlfiddle.com/#!9/7a660d/16

lihonglian26 回答:如何在 MYSQL 中用 sum 过滤窗口函数?

您的订单应该在您拥有之后。即


select 
    name,sum(score) 
from 
    submissions 
inner join 
    hacker on submissions.hacker_id = hacker.hacker_id
group by 
    submissions.hacker_id
having 
    sum(score) > 50 
order by 
    sum(score) desc
,

order by 应该在最后

select name,sum(score) 
from submissions 
inner join hacker on submissions.hacker_id = hacker.hacker_id
group by submissions.hacker_id
having sum(score) > 50 
order by sum(score) desc
,

您也可以在 sum 语句中使用 CASE。这种方法适用于 windows 函数,尽管我还没有针对正常的 sum 聚合函数对其进行测试 选项 1(总和的情况):

select name,sum(case when score>50 else 0 end) 
from submissions inner join hacker on submissions.hacker_id = hacker.hacker_id
group by submissions.hacker_id
order by sum(score) desc

选项 2 Windows 功能:

select name,sum(case when score>50 else 0 end) over (partition by submissions.hacker_id)
from submissions inner join hacker on submissions.hacker_id = hacker.hacker_id
group by submissions.hacker_id

order by 子句略有变化,所以我省略了它,但您可以随时再次添加

本文链接:https://www.f2er.com/6828.html

大家都在问