у меня есть SQL отборное заявление следующим образом:Как сделать заказ по количеству строк с определенным значением столбца
select * from editortemp order by case
when CategoryID = 10 then 0
else CategoryID end,
Ranking
Я хотел бы изменить порядок результата, так что в дополнение к класть все строки с CategoryID = 10 вверху, REST строк будет упорядочен в соответствии с количеством строк с каждым кодом категории в порядке убывания.
Когда я пытаюсь делать
select * from editortemp order by case
when CategoryID = 10 then 0
else count(CategoryID) end,
Ranking
Я получаю ошибку: Колонка «editortemp.EditorTempID» недопустим в списке выбора, поскольку он не содержится ни в статистической функции или предложения GROUP BY.
После изучения этой ошибки в Интернете, похоже, что это означает, что существует проблема с логикой оператора select.
Как создать оператор логического выбора, который будет упорядочивать строки, как описано выше?
EDIT: Когда я пытаюсь запустить следующее заявление:
select * from editortemp order by case
when CategoryID = 10 then 0
else (select count(CategoryID) from editortemp) end,
Ranking
Я не получаю ошибку, упомянутых выше, но заказ не выходит правильно. Он помещает все категории = 10 строк вверху, но затем начинает упорядочиваться в соответствии с ранжированием, а не по счету категории. Любые идеи, что нужно изменить, чтобы получить результаты, которые я хочу?
Большое вам спасибо за помощь!
Возможно, здесь не уместно, но вы всегда должны добавить тег для используемой СУБД (Postgres, Oracle, ...) –
Причина, по которой последний запрос не работает, заключается в том, что вы являетесь округом ng все строки в 'EditorTemp' - у вас нет предложения о корреляции. Поэтому каждая строка получает одинаковое значение ... –