通过sqlite3选择列中至少有X行具有某些值的行?

通过sqlite3选择列中至少有X行具有某些值的行?,sqlite,Sqlite,假设我有以下数据: |bookID|data| |1|a| |1|b| |1|c| |2|x| |2|y| |3|t| 我想选择至少有X行的所有书籍。所以如果X=3,那么我只能得到bookID=1的所有行。如果X=2,那么我只能得到bookID=1或bookID=2的所有行,以此类推 我可以用SQLite3实现这一点吗?此示例将获得所有具有3行或更多行的书籍 SELECT * FROM Books WHERE BookID IN (SELECT BookID FROM Books

假设我有以下数据:

|bookID|data|
|1|a|
|1|b|
|1|c|
|2|x|
|2|y|
|3|t|
我想选择至少有X行的所有书籍。所以如果X=3,那么我只能得到bookID=1的所有行。如果X=2,那么我只能得到bookID=1或bookID=2的所有行,以此类推


我可以用SQLite3实现这一点吗?

此示例将获得所有具有3行或更多行的书籍

  SELECT * FROM Books WHERE BookID IN
     (SELECT BookID FROM Books GROUP BY BookID HAVING COUNT(*) >= 3)

下面是一种通过加入子查询来实现的方法:

SELECT bookID FROM books
    JOIN (SELECT COUNT(*) AS book_count,bookID FROM books GROUP BY bookID)
        USING (bookID)
    WHERE book_count >= 2
    GROUP BY bookID

更不冗长(可能也更快)。

我在这台计算机上没有SQLite来测试它,但它应该可以工作。你看到了什么结果?1,a(新行)1,b(新行)1,c(新行)--维尔德,呃!我希望我能把两个答案都标为正确。拉里·卢斯蒂格的作品无疑是有效的,然而,它仅限于有一个索引。这个解决方案允许你有多个索引,我最后不得不用这个来解决另一个类似的问题。