我有一张桌子,根据一个人在该类别中花费的金额,我必须在每个类别中获得前10名。我的样本数据是
person category amount
roger perfume 20
jim perfume 50
joe tv 5
jim tv 25
kathy car 40
alicia perfume 100
我必须在一个查询中得到这个。我知道限制不适用于金额,如限额10 。请帮忙
答案 0 :(得分:1)
使用变量:
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
切片中的行。
因此,外部查询返回每category
个排名最高的10行。如果特定类别的记录少于10条,则返回所有这些记录。
答案 1 :(得分:-1)
由于类别多次出现,您需要按类别进行分组,总结金额。然后对其进行排序并保留所需的行数。
我认为以下内容可行:
SELECT category, SUM(amount) as amount
FROM mytable
GROUP BY category
ORDER BY SUM(amount) DESC
LIMIT 10
答案 2 :(得分:-1)
试试这个
Select Top 10
person, category, sum(amount) as Amount
from Table
group by person,category