首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:使用COUNT()对总金额进行排名

MySQL:使用COUNT()对总金额进行排名
EN

Stack Overflow用户
提问于 2021-02-24 16:25:48
回答 1查看 60关注 0票数 2

编辑:我想用COUNT()排名

我对客户下的每个订单都做了一个视图。在下一步中,我编写了一个查询来计算客户购买的总金额。现在我想根据他们的总购买量对客户进行排名。

我写了这个查询:

代码语言:javascript
运行
复制
SELECT u.m_name, SUM(u.num * u.price) AS total,
(SELECT COUNT(*)
FROM v_sales AS x
WHERE x.m_id = u.m_id
AND (SELECT SUM(s1.num * s1.price) FROM v_sales AS s1 WHERE s1.m_id = x.m_id)
>
(SELECT SUM(s2.num * s2.price) FROM v_sales AS s2 WHERE s2.m_id = x.m_id)
) + 1 AS Rank
FROM v_sales AS u
GROUP BY u.m_id;

但结果并不是预期的:

代码语言:javascript
运行
复制
# m_name   total   Rank
川島智弘    2620    1
河田英毅    0       1
山田忠明    15420   1
永峰弘万    500     1
永山智広    380     1

我需要以下输出:

代码语言:javascript
运行
复制
# m_name    total   Rank 
川島智弘     2620    2
河田英毅     0       5
山田忠明     15420   1
永峰弘万     500     3
永山智広     380     4

有人知道我做错了什么吗?如果有人能解释为什么我的查询不能工作,那也会很有帮助。这是一个Fiddle

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-24 20:17:40

您可以使用MariaDB 10.4中的RANK函数。

代码语言:javascript
运行
复制
SELECT m_name, SUM(num * price) AS total,
 RANK() OVER(ORDER BY SUM(num * price) DESC)
FROM v_sales
GROUP BY m_id;

Fiddle

无窗口函数:

代码语言:javascript
运行
复制
SELECT t1.m_name,MAX(t1.total),COUNT(t2.m_name)+1 as RANK
FROM
(SELECT m_name, SUM(num * price) AS total FROM
v_sales
GROUP BY m_id) t1
LEFT JOIN
(SELECT m_name, SUM(num * price) AS total FROM
v_sales
GROUP BY m_id) t2
ON t1.total<t2.total
GROUP BY t1.m_name
ORDER BY 3

Fiddle

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66347105

复制
相关文章

相似问题

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