mysql mariadb 排名_查找MySQL / MariaDB中的排名和项目总数

我有一个销售汇总表,如:

CREATE TABLE `sales_data` (

`id` int(4) unsigned NOT NULL,

`start_date` date NOT NULL,

`end_date` date DEFAULT NULL,

`store_sales` int(11) DEFAULT 0,

PRIMARY KEY (`id`,`start_date`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

id 列是产品ID, store_sales 是本周的总项目销售额 .

我希望根据销售情况找到特定产品ID的等级 AND 销售的独特产品总数 - 不是销售总额,而是不同的项目 .

到目前为止我有:

SELECT FORMAT(tmp.rank, 0) AS rank, tmp.id, FORMAT(MAX(tmp.row_num), 0) AS total

FROM (

SELECT

sd.id

DENSE_RANK() OVER (ORDER BY SUM(sd.store_sales) DESC) AS rank,

ROW_NUMBER() OVER (ORDER BY sd.id) AS row_num

FROM sales_data sd

WHERE sd.start_date >= '2017-01-01'

AND sd.end_date <= '2017-05-15'

GROUP BY sd.id

) AS tmp

WHERE tmp.id = 9233

LIMIT 1;

我认为,问题是 MAX(tmp.row_num) 受外部查询中的 WHERE 子句限制,只需选择该单个项目的行号 .

有没有办法在不运行子查询两次的情况下实现这一目的?

Edit: 这就是我为内部查询获取的内容:

rank,id,total

-------------------

1,4920,2

2,4043,3

3,3514,5

4,2425,7

5,4503,11

...

虽然这是你想要的:

rank,id,total

-------------------

1,4920,373

2,4043,373

3,3514,373

4,2425,373

5,4503,373

...

所以我的外部查询可以选择 WHERE id = 4043 ,我可以打印为 Ranked {rank} out of {total} 给我 Ranked 2 out of 373 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值