gpt4 book ai didi

MySQL Dense_Rank() 和 Max() 函数不在同一语句中工作

转载 作者:行者123 更新时间:2023-11-29 15:22:02 26 4
gpt4 key购买 nike

我从这个 MySQL 查询开始,它运行良好:

select 
h.id,
h.name,
count(distinct c.sales_id)
from customers h join sales c on h.id=c.id
group by 1,2
order by 3 desc, 2 desc

但是,现在我想在同一语句中添加 2 个附加列:

  1. 第一列应该是“count(distinct c.sales_id)”列中的最大值 --> max(count(distinct c.sales_id))
  2. 第二列应在“count(distinct c.sales_id)”列添加一个dense_rank --> dense_rank() over (order by count(distinct c.sales_id))

我很难添加这两列,因为我不断收到此查询的聚合错误:

select 
h.id,
h.name,
count(distinct c.sales_id),
max(count(distinct c.sales_id)),
dense_rank() over (order by count(distinct c.sales_id))
from customers h join sales c on h.id=c.id
group by 1,2
order by 3 desc, 2 desc

有人可以帮忙吗?

最佳答案

您可能非常接近解决方案。

在 SQL 中,无法设置最大计数。
但最多可以超过 1 个计数。

所以这应该适用于 MySql 8.0

(未经样本数据测试)

select 
h.id,
h.name,
count(distinct c.sales_id) as total_uniq_sales,
MAX(count(distinct c.sales_id)) OVER (),
dense_rank() over (order by count(distinct c.sales_id))
from customers h
join sales c on h.id=c.id
group by h.id, h.name
order by total_uniq_sales desc, h.name desc

其背后的原因是窗口函数是在聚合函数之后处理的。

关于MySQL Dense_Rank() 和 Max() 函数不在同一语句中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314196/

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