SQL 每个分类的前三个数据

有一个用户表User(id, email),一个付费记录表Transaction (id, transaction_type, transaction_amount), 找出在每个付费类别里,付费总额最高的3个用户的email 和付费总额

HUX布斯
浏览 1068回答 2
2回答

慕娘9325324

具体语句就不写了,说一下思路。mysql高版本,支持窗口函数,像这样的:row_number&nbsp;over&nbsp;(partition&nbsp;by&nbsp;transaction_type&nbsp;order&nbsp;by&nbsp;amount&nbsp;desc)然后根据函数的返回值<=3,作为过滤条件如果不支持的话,mysql有@变量,大概用法如下,需要sql中先按照transaction_type amount排序,判断transaction_type 和前一个是否相等,重置@rownum的值。最后按照下面语句中rank的值进行过滤。用关键词“mysql row number”搜索,能找到完整的例子。SELECT&nbsp;t.*,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@rownum&nbsp;:=&nbsp;@rownum&nbsp;+&nbsp;1&nbsp;AS&nbsp;rank &nbsp;&nbsp;FROM&nbsp;YOUR_TABLE&nbsp;t,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(SELECT&nbsp;@rownum&nbsp;:=&nbsp;0)&nbsp;r
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL