我有一个用户和一个分数表。每个用户有多个分数,例如:
- 用户 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/