鍍金池/ 問答/數(shù)據(jù)庫/ SQL 每個分類的前三個數(shù)據(jù)

SQL 每個分類的前三個數(shù)據(jù)

有一個用戶表User(id, email),一個付費記錄表Transaction (id, transaction_type, transaction_amount), 找出在每個付費類別里,付費總額最高的3個用戶的email 和付費總額

回答
編輯回答
神曲

具體語句就不寫了,說一下思路。
mysql高版本,支持窗口函數(shù),像這樣的:

row_number over (partition by transaction_type order by amount desc)

然后根據(jù)函數(shù)的返回值<=3,作為過濾條件

如果不支持的話,mysql有@變量,大概用法如下,需要sql中先按照transaction_type amount排序,判斷transaction_type 和前一個是否相等,重置@rownum的值。最后按照下面語句中rank的值進行過濾。
用關(guān)鍵詞“mysql row number”搜索,能找到完整的例子。

SELECT t.*, 
       @rownum := @rownum + 1 AS rank
  FROM YOUR_TABLE t, 
       (SELECT @rownum := 0) r
2018年5月8日 15:53
編輯回答
我不懂

用這個兩個關(guān)鍵字應該能幫你解決問題:desc limit3;

2017年5月30日 09:09
編輯回答
扯機薄
SELECT user.id, user.email, SUM(transaction.transaction_amount) as total_payment
FROM User user LEFT JOIN Transaction transaction ON user.ID = transaction.user_id
GROUP BY transaction.transaction_type
order by total_payment desc limit 0,3

思路,根據(jù)付費類別分組,計算每個付費類別下各用戶的付費總額,按總額降序取前三

2018年5月29日 05:52