SQL: сгруппировать по подзапросу - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь найти выходные данные всех книг, которые имеют более одного жанра, используя операторы по группам и подзапросам.Тем не менее, он продолжает возвращать Subquery returns more than 1 row.Это то, что я до сих пор:

SELECT title 
  FROM book 
 WHERE 1 < (SELECT COUNT(genre) FROM genres GROUP BY book_id);

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Вам кажется, что это коррелированный подзапрос:

SELECT b.title 
FROM book b
WHERE 1 < (SELECT COUNT(*) FROM genres g WHERE g.book_id = b.book_id);
0 голосов
/ 26 февраля 2019

SELECT distinct a.title FROM book a, (select bookid,count(distinct genre)genres from genres group by bookid)b WHERE a.book_id=b.bookid and b.genres>1

надеюсь, это поможет!

0 голосов
/ 26 февраля 2019

Вот пример:

SELECT b.title
  FROM ( SELECT g.book_id
           FROM genres g
          GROUP 
             BY g.book_id
         HAVING COUNT(1) > 1
       ) m
  JOIN book b
    ON b.id = m.book_id

Встроенное представление m предназначено для возврата значений book_id, которые появляются более одного раза в таблице genres.В зависимости от ограничений уникальности нам может потребоваться подсчитать различные значения genre

         HAVING COUNT(DISTINCT g.genre) > 1

, если мы хотим найти книги точно с тремя родственными жанрами:

         HAVING COUNT(DISTINCT g.genre) = 3

Как только мы получимсписок book_id значений, мы можем присоединиться к таблице book.(Запрос предполагает, что book_id в genres является ссылкой внешнего ключа на столбец id в таблице book.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...