SQL:在子查询中分组

时间:2019-02-26 16:44:39

标签: mysql sql group-by subquery

我正在尝试使用group by语句和子查询来查找所有具有一种以上体裁的所有书籍的输出。但是,它一直返回Subquery returns more than 1 row。这是我到目前为止的内容:

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

3 个答案:

答案 0 :(得分:3)

这是一个例子:

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列的外键引用。)

答案 1 :(得分:1)

您似乎是一个相关的子查询:

SELECT b.title 
FROM book b
WHERE 1 < (SELECT COUNT(*) FROM genres g WHERE g.book_id = b.book_id);

答案 2 :(得分:-2)

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

希望有帮助!