首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用WHERE替换WHERE

用WHERE替换WHERE
EN

Stack Overflow用户
提问于 2013-04-17 14:06:59
回答 5查看 2.7K关注 0票数 1
代码语言:javascript
复制
SELECT team, sum(maths)
FROM marks
GROUP BY team
HAVING sum(maths) = (
    SELECT max(sum(maths))
    FROM marks
    GROUP BY team
)

有三个团队A,B,C,其中有一些没有成员。

首先,使用SELECT max(sum(maths)) FROM marks GROUP BY team,我得到了数学的最大和。

现在,使用整个查询,我试图显示数学成绩最高的小组。

如何重写查询,以便用WHERE替换HAVING

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-17 14:30:42

请尝试:

代码语言:javascript
复制
select * from (
  select team, v maxmarks, row_number() over (order by v desc) RNum from(
    SELECT team, sum(maths) v
    FROM marks 
    group by team 
  )x
)xx where RNum=1;
票数 1
EN

Stack Overflow用户

发布于 2013-04-17 14:20:17

可以将there替换为WHERE,但这样做没有任何好处。

代码语言:javascript
复制
select team, sum(maths) from
(
   SELECT team, sum(maths) as total
   FROM marks
   GROUP BY team
) t1
where t1.total = ( select max(t1.total) from t1 )
票数 0
EN

Stack Overflow用户

发布于 2013-04-17 14:36:44

如果对结果进行排序,则可以使用ROWNUM pseudocolumn将它们包装在外部SELECT中,从而将其限制为第一行

代码语言:javascript
复制
SELECT *
FROM (
    SELECT team, sum(maths)
    FROM marks
    GROUP BY team
    ORDER BY sum(maths) DESC
)
WHERE ROWNUM = 1;

或者,您可以使用ROW_NUMBER analytic function,再次包装在外部select中:

代码语言:javascript
复制
SELECT *
FROM (
    SELECT team, sum(maths),
        ROW_NUMBER() OVER (PARTITION BY team ORDER BY sum(maths) DESC) AS rn
    FROM marks
    GROUP BY team
)
WHERE rn = 1;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16052747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档