按类别mysql排名前10位

时间:2015-11-17 21:43:37

标签: mysql sql mysql-variables

我有一张桌子,根据一个人在该类别中花费的金额,我必须在每个类别中获得前10名。我的样本数据是

person category amount
roger  perfume   20
jim    perfume   50
joe    tv        5
jim    tv        25
kathy  car       40
alicia perfume   100

我必须在一个查询中得到这个。我知道限制不适用于金额,如限额10 。请帮忙

3 个答案:

答案 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条,则返回所有这些记录。

Demo here

答案 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