我有一张表格,我必须根据该类别中一个人的花费在每个类别中获得前 10 名。我的样本数据是
person category amount
roger perfume 20
jim perfume 50
joe tv 5
jim tv 25
kathy car 40
alicia perfume 100
我必须在一个查询中得到这个。我知道 limit 不适用于像limit amount 10这样的金额。请帮忙
我有一张表格,我必须根据该类别中一个人的花费在每个类别中获得前 10 名。我的样本数据是
person category amount
roger perfume 20
jim perfume 50
joe tv 5
jim tv 25
kathy car 40
alicia perfume 100
我必须在一个查询中得到这个。我知道 limit 不适用于像limit amount 10这样的金额。请帮忙
使用变量:
SELECT person, category, amount
FROM (
SELECT person, category, amount,
@rn := IF(@cat = category, @rn+1,
IF(@cat := category, 1, 1)) AS rn
FROM mytable
CROSS JOIN (SELECT @rn := 0, @cat := '') AS vars
ORDER BY category, amount DESC) AS t
WHERE t.rn <= 10
@rn
用于category
按降序枚举每个切片中的行amount
。
因此,外部查询每返回 10 个排名最高的行category
。如果特定类别的记录少于 10 条,则返回所有这些记录。
由于类别出现多次,您需要按类别分组,总结金额。然后对其进行排序并保留所需的行数。
我认为以下将起作用:
SELECT category, SUM(amount) as amount
FROM mytable
GROUP BY category
ORDER BY SUM(amount) DESC
LIMIT 10
尝试这个
Select Top 10
person, category, sum(amount) as Amount
from Table
group by person,category