为了账号安全,请及时绑定邮箱和手机立即绑定

SQL 每个分类的前三个数据

SQL 每个分类的前三个数据

HUX布斯 2018-08-05 13:59:17
有一个用户表User(id, email),一个付费记录表Transaction (id, transaction_type, transaction_amount), 找出在每个付费类别里,付费总额最高的3个用户的email 和付费总额
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

具体语句就不写了,说一下思路。
mysql高版本,支持窗口函数,像这样的:

row_number over (partition by transaction_type order by amount desc)

然后根据函数的返回值<=3,作为过滤条件

如果不支持的话,mysql有@变量,大概用法如下,需要sql中先按照transaction_type amount排序,判断transaction_type 和前一个是否相等,重置@rownum的值。最后按照下面语句中rank的值进行过滤。
用关键词“mysql row number”搜索,能找到完整的例子。

SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r


查看完整回答
反对 回复 2018-08-09
  • 2 回答
  • 0 关注
  • 1039 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信