说我有以下数据:通过sqlite3选择行中至少有X行与列中的一些值?
|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做到这一点吗?
说我有以下数据:通过sqlite3选择行中至少有X行与列中的一些值?
|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
Larry Lustig’s answer是冗长的要少得多(也可能更快,太)。
我希望我可以将两个答案都标记为正确。然而,Larry Lustig绝对有效,但仅限于只有一个索引。这个解决方案允许你有多个索引,并且最终我不得不用另一个类似的问题来解决这个问题。 – 2010-10-20 19:36:23
这似乎并不奏效。 – ocodo 2010-10-19 21:52:33
我没有这台计算机上的SQLite来测试它,但它应该可以工作。你看到了什么结果? – 2010-10-19 21:56:43
1,a(换行符)1,b(换行符)1,c(换行符)---奇怪的呃! – ocodo 2010-10-19 22:00:37