简体   繁体   English

如何在 GROUP_CONCAT 中使用选择别名?

[英]How do I use select alias inside GROUP_CONCAT?

  1. I am averaging 4 columns and giving an alias score .我平均 4 列并给出别名score
  2. Now, I am trying to use score alias inside GROUP_CONCAT to get rank .现在,我试图在 GROUP_CONCAT 中使用score别名来获得rank
  3. Everything works except when I add (SELECT GROUP_CONCAT( score ORDER BY score DESC) FROM math )) AS rank .一切正常,除非我添加(SELECT GROUP_CONCAT( score ORDER BY score DESC) FROM math )) AS rank
  4. I understand it does not work because score does not exist in the math table.我知道它不起作用,因为math表中不存在score But what do I need to do to make it work?但是我需要做什么才能让它发挥作用?

Here is my query in laravel 5.5 -这是我在 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. I get 500 server error from above query.我从上面的查询中得到 500 服务器错误。
  2. I am expecting below output我期待低于输出
    {
        "id": 38,
        "score": 99.24250030517578,
        "rank": 1

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

Try this one for your query.试试这个为您的查询。 I changed it to checl also the score我把它改成检查分数

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

As i said some data as test ground would be nice正如我所说,一些数据作为试验场会很好

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM