开发者社区> 问答> 正文

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

已解决

我从这个运行良好的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

有人可以帮忙吗?

展开
收起
保持可爱mmm 2019-12-13 10:34:38 605 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

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

    在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

    2019-12-13 10:34:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像