我从这个运行良好的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个其他列:
第一列应该是'count(distinct c.sales_id)'列中的最大值-> max(count(distinct c.sales_id))
第二列应通过'count(distinct c.sales_id)'列添加一个密集等级-> 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中,无法计数。 但是一个人最多可以超过一个计数。
所以这应该在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
其背后的原因是窗口函数是在聚合函数之后处理的。
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。