У меня есть таблица "Автор", содержащая авторов (Nicknames & IDs).
В таблице Content каждый элемент имеет поле "Автор", содержащее идентификатор автора, который его создал.
Я хочу выбрать всех авторов, используя запрос SELECT, и заказать им количество Содержимого, которое они создали.
Это то, что я пробовал до сих пор:
SELECT id,Nickname FROM Authors
WHERE 1 ORDER BY (SELECT COUNT(*) FROM Content WHERE Author=id) ASC
Он работает, но выход недействителен - у него нет определенного порядка...
Любая помощь приветствуется.
Это должно делать то, что вы хотите:
SELECT a.id, a.Nickname
FROM Authors a
WHERE 1
ORDER BY (SELECT COUNT(*) FROM Content c WHERE c.Author = a.id) ASC;
Это делает корреляцию явной. Ваша версия будет выдавать несортированные результаты, если у Content
есть столбец id
что вполне вероятно.
Чаще всего, вы хотели бы подсчет в SELECT
, и вы бы сделали:
SELECT a.id, a.Nickname, COUNT(c.Author) as num_content
FROM Authors a LEFT JOIN
Content c
ON c.Author = a.id
GROUP BY a.id, a.Nickname
ORDER BY num_content ASC;
Вы можете использовать:
SELECT a.id,a.Nickname
FROM Authors a
LEFT JOIN Content c
ON c.Author=a.id
GROUP BY a.id,a.Nickname
ORDER BY COUNT(*) DESC