mysql - 在 maria db(mysql) 中按顺序和分组进行选择

标签 mysql group-by sql-order-by mariadb

我有一个虚拟问题

桌面游戏日志

| id | game_id | score| user_id | created_at
|1    | 1      | 100 |  1      | 2015-01-01 00:00:00|
|2    | 1      | 200 |  2      | 2015-01-01 10:00:00|
|3    | 2      | 100 |  2      | 2015-01-01 00:00:00|
|4    | 2      | 500 |  1      | 2015-01-01 01:00:00|
|5    | 2      | 900 |  4      | 2015-01-01 03:00:00|
|X    | 2      | 500 |  1      | 2015-01-02 02:00:00|
|Y    | 3      | 600 |  1      | 2015-01-02 01:00:00|

我需要在 2015 年 1 月 1 日之前使用用户 ID 创建游戏评级 结果看起来像

| id | game_id | score| user_id | created_at
|2    | 1      | 200 |  2      | 2015-01-01 10:00:00|
|5    | 2      | 900 |  4      | 2015-01-01 03:00:00|

我尝试过类似的东西

SELECT   p.id, p.score, p.game_id, p.user_id 
FROM     ( 
                  SELECT   * 
                  FROM     game_log 
                  WHERE    game_log.score>0 
                  AND      game_log.created_at >="2015-01-01 00:00:00" 
                  AND      game_log.created_at <"2015-01-02 00:00:00" 
                  ORDER BY score DESC ) AS p 
GROUP BY p.game_id 
ORDER BY score DESC ;

但是没有顺序就得到结果

谢谢!

最佳答案

MariaDB 会忽略子查询中没有 LIMITORDER BYWhy is ORDER BY in a FROM Subquery Ignored? 。解决方法是在子查询中使用 LIMIT,该值足够大而不会过滤结果。

您还可以在 WHERE 子句中使用带有 LIMIT 1 的相关子查询来仅获取每场比赛得分最高的行:

SELECT   p.id, p.score, p.game_id, p.user_id 
from game_log p
WHERE p.id = (
    SELECT l.id
    FROM game_log l
    WHERE l.game_id = p.game_id
      AND l.score      >  0 
      AND l.created_at >= "2015-01-01 00:00:00" 
      AND l.created_at <  "2015-01-02 00:00:00" 
    ORDER BY l.score DESC, l.id
    LIMIT 1
)
ORDER BY p.score, p.game_id DESC ;

还有其他解决方案,您可以在 SO 上找到,这将解决您的问题。

关于mysql - 在 maria db(mysql) 中按顺序和分组进行选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36485072/

相关文章:

MYSQL GROUP BY 中的最后一个条目从 m 到 n JOIN

python - Pandas - 使用 Groupby 列出新列中的数据列

mysql - 如何在mysql中使用游标从结果集中找到最小值?

MySQL 将行转为动态数量的列

php - 代码点火器查询问题

sql - 如何对具有 NULL 值的字段进行分组?

MYSQL - 排序依据和限制 : Different result when using variable or constant

mysql union 没有按预期工作

Mysql 如何从日期列中获取新日期?

mysql - ORDER BY 导致 MySQL 查询变得极慢