首页 > 解决方案 > 如何在 GROUP_CONCAT 中使用选择别名?

问题描述

  1. 我平均 4 列并给出别名score
  2. 现在,我正在尝试score在 GROUP_CONCAT 中使用别名来获取rank.
  3. 一切正常,除非我添加(SELECT GROUP_CONCAT( score ORDER BY score DESC) FROM math )) AS rank.
  4. 我知道它不起作用,因为表score中不存在math。但我需要做些什么才能让它发挥作用?

这是我在 laravel 5.5 中的查询-

$ranking = DB::select('SELECT id, (a.addition_accuracy + a.subtraction_accuracy + a.multiplication_accuracy + a.division_accuracy)/4 as score, (SELECT GROUP_CONCAT( score ORDER BY score DESC) FROM math )) AS rank FROM math a where level = 5');

  1. 我从上面的查询中得到 500 服务器错误。
  2. 我期待低于输出
    {
        "id": 38,
        "score": 99.24250030517578,
        "rank": 1

    },
    {
        "id": 51,
        "score": 84.88500213623047,
        "rank": 2
    },
    {
        "id": 204,
        "score": 69.27500057220459,
        "rank": 3
    }
]```

标签: mysqllaravellaravel-5eloquentsql-server-group-concat

解决方案


试试这个作为您的查询。我把它改成 checl 也得分

SELECT 
  id
  , (a.addition_accuracy + a.subtraction_accuracy + a.multiplication_accuracy + a.division_accuracy)/4 as score
  ,if(@score = score,@rank:= @rank,@rank:= @rank+1) as rank
  ,  @score := score
  FROM math a,(SELECT @rank :=0) b ,(SELECT @score :=0) c
  where level = 5
  ORDER BY score DESC
LIMIT 3

正如我所说,一些数据作为试验场会很好


推荐阅读