3

请看下面的 SQL Fiddle。

http://sqlfiddle.com/#!2/f7939/3

你会看到我的查询:

SELECT sub.entry_id, sum(jud.stage), sub.category_id, sub.member_group
FROM exp_judging AS jud
LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id
WHERE jud.rel_id = jud.rel_id
GROUP BY jud.rel_id
ORDER BY 3 ASC
LIMIT 10

这是将具有相同 rel_id 的所有行添加在一起,然后输出它们。

我只需要输出每个类别的前 x 个数字,现在让我们说每个类别中的 3 个。

例如,我的 SQL Fiddle 的结果将是:

类别 1:(entry_id 按得分顺序)10、11、16

类别 2:13、12、14

我怎样才能做到这一点?

4

1 回答 1

2

虽然我确信必须有一个更清洁的解决方案,但您可以引入一个row numberusinguser defined variables来实现这一点:

SELECT *
FROM (
  SELECT *,
    @rn:=IF(@prevCat=category_id, @rn + 1,1) rn,
    @prevCat:=category_id
  FROM (
    SELECT sub.entry_id, 
      sum(jud.stage), 
      sub.member_group,
      sub.category_id
    FROM exp_judging AS jud
      LEFT JOIN exp_submissions AS sub ON jud.rel_id = sub.id
    GROUP BY jud.rel_id
    ORDER BY sub.category_id, sum(jud.stage) DESC, sub.entry_id
  ) T
    JOIN (SELECT @rn:=0, @prevCat:=0) T2
) T
WHERE rn <= 3
于 2013-10-07T14:39:17.730 回答