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.我做错了什么?

如果你想使用MAX(id)而不是count,在阅读Pax的注释之后,下面的SQL会给你想要的东西

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

你可以查询实际的行数

  SELECT Count(*)FROM tblName 

http://www.w3schools.com/SQL/sql_func_count.asp

在SQL中,NULL = NULL是错误的,你通常必须使用IS NULL:

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

但是,如果你想要的行数,你应该只使用count(id)因为你的解决scheme将给10,如果你的行是(0,1,3,5,9)它应该给5。

如果你可以保证你总是从0到N,那么根据索引的实现,max(id)+1 可能会更快(遍历平衡树的右边可能会更快,而不是遍历整个树。

但是,这是非常具体的实现,我build议不要依赖它,不仅仅是因为它将性能locking到特定的DBMS。

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

我得到了同样的问题,如果我正确理解你的问题,我想知道在SQLite操作每插入性能后最后插入的ID。 我试了下面的声明:

 select * from table_name order by id desc limit 1 

该id是table_name的第一列和主键,上述语句显示了具有最大id的logging。

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

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

SELECT COUNT(*) AS c from profile

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