Как составить SQL-запрос с COUNT?

Имеется 2 таблицы в базе: authors и docs c полями (id, name) и (id, title, author).
Как составить запрос, который выводил бы поля: автор - количество его документов?
если у документа нет автора, то вывести количество таких документов
Что то вроде:
вася 15
петя 10
лена 0
null 50
  • Вопрос задан
  • 233 просмотра
Решения вопроса 2
Vityarik
@Vityarik
select au.name, count(docs.id)
from docs 
left join  authors au on au.id = docs.author
group by au.name
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `a`.`name`, IFNULL(`d`.`count`, 0) AS `count`
    FROM `authors` AS `a`
    LEFT JOIN (
        SELECT `author`, COUNT(*) AS `count`
            FROM `docs`
            GROUP BY `author`
    ) AS `d` ON `d`.`author` = `a`.`id`
UNION (SELECT CONCAT('Неизвестный ', IFNULL(`d`.`author`, '')), `d`.`count`
    FROM `authors` AS `a`
    RIGHT JOIN (
        SELECT `author`, COUNT(*) AS `count`
            FROM `docs`
            GROUP BY `author`
    ) AS `d` ON `d`.`author` = `a`.`id`
    WHERE `a`.`id` IS NULL)
ORDER BY `count` DESC

sqlfiddle.com/#!9/9dd7c/9
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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