You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用FIND_IN_SET和GROUP_CONCAT对子查询结果进行排名

实现门店销售额排名的查询方案

你可以通过窗口函数在现有查询基础上添加排名逻辑,同时输出"排名/总门店数"的格式。以下是优化后的完整SQL:

WITH location_sales AS (
    SELECT 'Location 1' AS location, SUM(t_amount) AS sales FROM transaction_1 WHERE t_type = 1
    UNION ALL
    SELECT 'Location 2', SUM(t_amount) FROM transaction_2 WHERE t_type = 1
    UNION ALL
    SELECT 'Location 3', SUM(t_amount) FROM transaction_6 WHERE t_type = 1
)
SELECT 
    location,
    sales,
    RANK() OVER(ORDER BY sales DESC) AS rank_num,
    COUNT(*) OVER() AS total_locations,
    CONCAT(RANK() OVER(ORDER BY sales DESC), '/', COUNT(*) OVER()) AS rank_display
FROM location_sales
ORDER BY rank_num;

关键说明:

  • 用UNION ALL替代原查询的UNION:因为各门店数据无重复,UNION ALL不需要去重,执行效率更高
  • RANK() OVER(ORDER BY sales DESC):按销售额降序计算排名,若存在销售额相同的门店,会跳过后续名次(比如两个门店并列第1,下一个门店排第3);如果需要连续排名(并列第1后下一个排第2),替换为DENSE_RANK() OVER(ORDER BY sales DESC)即可
  • COUNT(*) OVER():获取参与排名的总门店数量
  • CONCAT():将排名和总数量拼接成你需要的"X/Y"格式

兼容说明:

该方案适用于支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等),如果是老版本数据库(如MySQL 5.x),可以用变量模拟排名逻辑,但推荐优先升级到支持窗口函数的版本以简化查询。

内容的提问来源于stack exchange,提问作者clknappy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:56:02