php - 按组排序(查询生成器)

标签 php sql laravel

我有一个用户和一个分数表。每个用户有多个分数,例如:

  • 用户 1 有 3 个分数:45、66、98
  • 用户 2 有 2 个分数:75、45
  • 用户 3 有 3 个分数:94、66、12

只有每个用户的最高分数才是相关的。我想要实现的是获得得分最高的 10 个用户。这适用于以下 Laravel 查询:

    $results = Score::orderBy('score', 'desc')
        ->groupBy('user_id')
        ->limit(10)
        ->get()

此查询的问题在于它返回排名靠前的用户,但不是他们的最高分数。它返回组中的第一个分数。因此,当我查询给定的示例时,将返回:

  • 1:用户1,45
  • 2:用户3,94
  • 3:用户2,75

我如何确保它返回得分最高的顶级用户?我尝试 ->distinct('score') 但这不起作用。

最佳答案

试试这个

$results = Score::select("*", DB::raw("MAX(score) as max")
    ->groupBy('user_id')
    ->orderBy('max', 'desc')
    ->limit(10)
    ->get();

关于php - 按组排序(查询生成器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33540238/

相关文章:

php - Laravel Docker - SQLSTATE[HY000] [2002] php_network_getaddresses : getaddrinfo failed: Name or service not known

mysql - 从字符串转换日期和/或时间时转换失败。 - 错误

mysql - Golang RESTful API 负载测试导致数据库连接过多

sql - Oracle 11g - 使用 RegEx 检查约束

php - MySQL 中批量更改列类型

laravel - 如何从 laravel 5.1 的公用文件夹中删除文件

php - 数据库播种错误 : Column not found: 1054 Unknown column 'client_id' in 'field list'

javascript - PHP Cookie 未设置/工作

java - 开源类似 gravatar 的实现?

PHP SimpleXML 大文件没有额外的内存使用