mysql - встроить запрос количества в другой запрос - PullRequest
1 голос
/ 11 декабря 2008

В postgres я вполне уверен, что вы можете сделать что-то вроде этого

SELECT
  authors.stage_name, 
  count(select id from books where books.author_id  = authors.id) 
FROM
  authors,
  books;

По сути, в этом примере я хотел бы вернуть список авторов и сколько книг написал каждый .... в одном запросе.

Возможно ли это? Я подозреваю, что этот подход довольно наивен.

Спасибо:)

Ответы [ 2 ]

1 голос
/ 11 декабря 2008

Ну, во-первых, он возвращает декартово произведение всех авторов ко всем книгам, независимо от того, написал ли этот автор эту книгу.

Вот как я написал бы запрос, чтобы получить результат, который, как вы говорите, вы хотите:

SELECT a.stage_name, COUNT(b.id)
FROM authors a
  LEFT OUTER JOIN books b ON (a.id = b.author_id)
GROUP BY a.id;

Вам нужно научиться писать запросы на соединение, если вы используете SQL. Соединение - это SQL, что такое цикл для языков программирования приложений. То есть это фундаментальная программная конструкция, которую вам нужно знать.

0 голосов
/ 11 декабря 2008

Как насчет использования объединения:

SELECT authors.stage_name, count(*) 
FROM authors INNER JOIN books on books.author_id = authors.id
GROUP BY authors.stage_name
...