Как использовать псевдоним выбора внутри GROUP_CONCAT? - PullRequest
0 голосов
/ 10 января 2020
  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. I ошибка сервера 500 из приведенного выше запроса.
  2. Ожидается вывод ниже
    {
        "id": 38,
        "score": 99.24250030517578,
        "rank": 1

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

1 Ответ

0 голосов
/ 10 января 2020

Попробуйте это по вашему запросу. Я изменил его на 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

Как я уже сказал, некоторые данные в качестве испытательного полигона будут хороши

...