SQLite - 获取数据库中的行数

时间:2009-03-21 10:34:39

标签: sqlite

我希望使用max(id)在表格中获得许多行。当它返回NULL时 - 如果表中没有行 - 我想返回0.当有行时我想返回max(id) + 1

我的行从0开始编号并自动增加。

以下是我的发言:

SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words

但它总是让我回复0.我做错了什么?

6 个答案:

答案 0 :(得分:231)

您可以使用

SELECT Count(*) FROM tblName
查询实际行数 见https://www.w3schools.com/sql/sql_count_avg_sum.asp

答案 1 :(得分:13)

如果你想使用MAX(id)而不是count,在阅读了Pax的注释后,下面的SQL将为你提供你想要的东西

SELECT COALESCE(MAX(id)+1, 0) FROM words

答案 2 :(得分:9)

在SQL中,NULL = NULL为false,您通常必须使用IS NULL:

SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words

但是,如果你想要行数,你应该只使用count(id),因为你的解决方案会给出10,如果你的行是(0,1,3,5,9)它应该给出5。 / p>

如果你可以保证你总是会有0到N的id,那么max(id)+1 可能会更快,具体取决于索引实现(遍历平衡的右侧可能会更快)数不过,而不是遍历整棵树。

但这是特定于实现的,我建议不要依赖它,尤其是因为它会将您的性能锁定到特定的DBMS。

答案 3 :(得分:4)

不确定我是否理解你的问题,但是max(id)根本不会给你行数。例如,如果你只有一行id = 13(假设你删除了前面的行),你将有max(id)= 13,但行数是1.正确(和最快)的解决方案是使用计数()。顺便说一句,如果你想知道为什么有一颗星星,那是因为你可以根据标准来计算线条。

答案 4 :(得分:2)

如果我正确理解你的问题我也遇到了同样的问题,我想知道在SQLite操作中每次插入性能之后的最后插入的id。我尝试了以下声明:

select * from table_name order by id desc limit 1

id是table_name的第一列和主键,上面提到的语句显示了id最大的记录。

但前提是你永远不会删除任何行,所以id的数量等于行数。

答案 5 :(得分:1)

扩展VolkerK的答案,为了使代码更具可读性,您可以使用AS来引用计数,例如:

SELECT COUNT(*) AS c from profile

这使得在某些框架中更容易阅读,例如,我使用Exponent' s(React Native)Sqlite集成,而没有AS语句,代码非常难看。