mysql - 使用查询限制组

标签 mysql sql database

请看下面的 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

我怎样才能做到这一点?

最佳答案

虽然我确定必须有一个更简洁的解决方案,但您可以使用 user defined variables 引入一个 row number 来实现此目的:

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

关于mysql - 使用查询限制组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19227268/

相关文章:

php - 一位数字验证码匹配,PHP

mysql - 如何使用 varchar 类型的列获取 mysql 中的唯一行

mysql - 如何从一组 ID 号中获取变量的 SUM? PLSQL

java sqlite - 显示选择

rest - _stats 与 _count 返回的 Elasticsearch 文档计数

mysql - 根据今天的日期 + 3 个月的日期发送邮件,而 SQL 日期不起作用

mysql - 如何定位和显示我的 .Net 页面的特定数据库字段

mysql - 在 MySQL 中使用 SELECT 语法创建表

c# - 为什么存储过程输出参数没有被 Entity Framework 的 ExecuteSqlCommand 方法读取?

java - @ManyToOne 与连接表的关系(nullable = false)