Задать вопрос
@vadikrudnov

Как отсортировать по столбцу данные, при этом чтобы имя столбца было взято из другого столбца?

Всем привет!

Как отсортировать по столбцу данные, при этом чтобы имя столбца было взято из другого столбца?

Есть запрос:
$table = Model::selectRaw('name_list, count(*) as count, sum(count_model * 2) as total, min(created_at) AS date')
            ->groupBy('name_list')
            ->orderBy('date', 'DESC')
            ->take(10)
            ->get();

В итоге получаем данные с названием из столбца name_list, а необходимо получить из столбца title.

Объясню в чем суть, сортировка должна быть обязательно по name_list, так как там всегда уникальные значения по дате, а в title могут быть не уникальные названия по дате, поэтому надо сделать сортировку по name_list и как то выцепить название из столбца title и назначить его в name_list под именем как title_list.
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Средний 12 комментариев
Решения вопроса 1
@Akina
Сетевой и системный админ, SQL-программист.
В коде SQL запрос выглядит так:
SELECT ANY_VALUE(title) AS title_list,
       SUM(count_model) AS count_model,
       COUNT(*) AS total,
       ANY_VALUE(created_at) AS `date`
FROM mymodels
GROUP BY name_list
ORDER BY name_list;

https://dbfiddle.uk/tiX1HDll

Возможно вместо ANY_VALUE использовать MIN/MAX, это не изменит результата, хотя и противоречит логике.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Ничего не понятно. Но из того, что привели в примере и проговорили словами можно слепить это:
$table = Model::selectRaw('title, name_list, count(*) as count, sum(count_model * 2) as total, min(created_at) AS date') // в выбираемые поля нужно добавить title - вы же хотите его извлечь?
            ->groupBy('title, name_list') // сюда нужно прописать группируемые поля, которые не участвуют в агрегирующих функциях count, sum, min и т.д.
            ->orderBy('name_list', 'DESC') // тут пишите поле, по которому сортируете, ASC или DESC - направления сортировки
            ->take(10)
            ->get();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы