按组排序(查询生成器)

时间:2015-11-05 08:59:24

标签: php sql laravel

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

  • User1有3个分数:45,66,98
  • User2有2个分数:75,45
  • User3有3个分数:94,66,12

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

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

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

  • 1:User1,45
  • 2:User3,94
  • 3:User 2,75

如何确保它返回得分最高的顶级用户?我尝试了 - >不同('得分')但这并没有奏效。

3 个答案:

答案 0 :(得分:2)

试试这个

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

答案 1 :(得分:0)

试试这个: (查询构建器)

语法:

Request

修改您的查询:

    if (orientation == UIInterfaceOrientationMaskPortrait) 
{
            self.view.frame = CGRectMake(0, 0, 1000, 800);


            self.tableView1.frame = CGRectMake(1, 0, 764,510);

        }
        else if (orientation == UIInterfaceOrientationMaskLandscapeLeft)
        {
            self.view.frame = CGRectMake(0, 0, 1300, 370);
            self.tableView1.frame = CGRectMake(0, 0, 1300, 370);
            self.view.backgroundColor = [UIColor blackColor];

        }

希望这有用。

答案 2 :(得分:0)

- 我不太了解querybuilder,但这个查询解决了问题

select top 10 * 
from 
(select userID, max(score) score from yourTable group by userID) K
order by score desc