gpt4 book ai didi

mysql - MySQL 中聚合值的 row_number() 函数

转载 作者:行者123 更新时间:2023-11-29 10:46:33 25 4
gpt4 key购买 nike

MySQL 中对聚合值实现 row_number() 函数,如下所示:

select 
section,
(SELECT COUNT(*)+1
FROM rpt_top_uv_hosts_d
WHERE rpt_date>='2017-06-07' and rpt_date<='2017-06-08' and section is not null and section = a.section
AND sum(uv) > a.uv
group by section,room_id,domain,name ) as 'Rank',
sum(uv) as 'uv',
room_id,
domain,
name
from rpt_top_uv_hosts_d a
where rpt_date>='2017-06-07' and rpt_date<='2017-06-08' and section is not null
group by section,room_id,domain,name
order by section,Rank asc;

主要目的是根据选定日期内相应的 uvroom_id 进行排名。然而,MySQL 只返回一句话:“Invalid use of group function”。

这个问题的原因是什么?子查询中不允许使用group by?以及如何解决这个问题?顺便说一下,此 BI 系统中不允许使用 SQL 变量。

感谢您提前提供的帮助..

<小时/>

我通过多子查询解决了这个问题,但是SQL看起来很糟糕..希望可以优化。

select 
section,
(select count(*)+1 from (select section,sum(uv) as uv_aggre,room_id,domain,name
from rpt_top_uv_hosts_d
WHERE rpt_date>='2017-06-07' and rpt_date<='2017-06-08' and section is not null
group by section,room_id,domain,name) a
where a.section = demo.section AND a.uv_aggre > demo.uv_aggre) as rank,
uv_aggre,
name,
room_id,
domain
from
(select section,sum(uv) as uv_aggre,room_id,domain,name
from rpt_top_uv_hosts_d
WHERE rpt_date>='2017-06-07' and rpt_date<='2017-06-08' and section is not null
group by section,room_id,domain,name) as demo
order by section,rank;

最佳答案

在某些 mysql 版本中,group by 必须具有 select 语句中的所有字段。因此,您还必须按查询的方式进行分组。您能否尝试以最后一组的排名重新运行,看看会发生什么?抱歉,我无法评论您的帖子,因为我太新了。 #sqlmode_only_full_group_by

另外,使用HAVING重写它,我没有看到你在哪里使用聚合函数,请告诉我:)

    SELECT COUNT(*)+1 
FROM rpt_top_uv_hosts_d
WHERE rpt_date>='2017-06-07' and rpt_date<='2017-06-08' and section is
not null and section = a.section

group by section,room_id,domain,name
HAVING sum(uv) > a.uv

关于mysql - MySQL 中聚合值的 row_number() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44452891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com