【问题标题】:How do I use select alias inside GROUP_CONCAT?如何在 GROUP_CONCAT 中使用选择别名?
【发布时间】:2020-04-28 11:54:51
【问题描述】:
  1. 我平均 4 列并给出别名 score
  2. 现在,我尝试在 GROUP_CONCAT 中使用 score 别名来获取 rank
  3. 除了我添加 (SELECT GROUP_CONCAT( score ORDER BY score DESC) FROM math )) AS rank 之外,一切正常。
  4. 我知道它不起作用,因为scoremath 表中不存在。但我需要做些什么才能让它发挥作用?

这是我在 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
    }
]```

【问题讨论】:

  • 发布样本数据和预期结果。
  • @forpas 我已经添加了我希望看到的内容
  • 你的MySql是什么版本的?
  • @forpas AWS Aurora MySQl 5.6 global_10a
  • 但是您还没有添加我们期望看到的内容。 meta.stackoverflow.com/questions/333952/…

标签: mysql laravel laravel-5 eloquent sql-server-group-concat


【解决方案1】:

试试这个作为您的查询。 我把它改成 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

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

【讨论】:

  • 我刚刚添加了我希望看到的内容
  • 编辑后的答案给出了完美的排名,但问题不大。当两个人的分数相同时,它给一个人一个排名 1,第二个人一个排名 2。我如何让它给两个排名 1。{“id”:38,“score”:99.24250030517578,“rank”: 1 }, { "id": 356, "score": 99.24250030517578, "rank": 2 }
  • 我不得不将“ORDER BY score”更改为“ORDER BY score desc”
  • 试试这个新的更改版本,它会检查分数是否相同它不会改变排名..
  • 它给出了错误。我认为它无法将score 放入@score。当我添加 @score := score 时它会中断
猜你喜欢
  • 2015-12-15
  • 1970-01-01
  • 2019-05-29
  • 2021-04-30
  • 2017-09-11
  • 2011-12-21
  • 1970-01-01
  • 2019-05-19
  • 2011-11-10
相关资源
最近更新 更多