如何从sqlite3获取所选结果的行数?

时间:2009-03-02 08:13:02

标签: sqlite count

我想获取所选行的数量以及所选数据。目前我必须使用两个sql语句:

一个是

select * from XXX where XXX;

另一个是

select count(*) from XXX where XXX; 

可以使用单个sql字符串实现吗?

我检查了sqlite3的源代码,找到了sqlite3_changes()的功能。但该功能仅在更改数据库时有用(在insert, delete or update之后)。

任何人都可以帮我解决这个问题吗?非常感谢你!

8 个答案:

答案 0 :(得分:15)

试试这种方式

select (select count() from XXX) as count, * 
from XXX;

答案 1 :(得分:13)

SQL不能混合单行(计数)和多行结果(从表中选择数据)。这是返回大量数据的常见问题。以下是如何处理此问题的一些提示:

  • 读取前N行并告诉用户“超过N行可用”。不是很精确但通常足够好。如果您将光标保持打开状态,则可以在用户点击视图底部时获取更多数据(Google阅读器执行此操作)

  • 不是直接选择数据,而是先将其复制到临时表中。 INSERT语句将返回复制的行数。稍后,您可以使用临时表中的数据来显示数据。您可以在此临时表中添加“行号”,以使分页更简单。

  • 在后台线程中获取数据。这允许用户在数据网格或表填充更多数据时使用您的应用程序。

答案 2 :(得分:2)

select (select COUNT(0) 
            from xxx t1 
            where t1.b <= t2.b 
            ) as 'Row Number', b from xxx t2 ORDER BY b; 

试试this

答案 3 :(得分:1)

您可以将它们合并为一个语句:

select count(*), * from XXX where XXX

select count(*) as MYCOUNT, * from XXX where XXX

答案 4 :(得分:0)

一旦你有select * from XXX个结果,你可以在程序中找到阵列长度吗?

答案 5 :(得分:0)

如果使用sqlite3_get_table而不是prepare / step / finalize,您将在数组(“结果表”)中一次性获得所有结果,包括列的数量和名称以及行数。然后,您应该使用sqlite3_free_table

释放结果

答案 6 :(得分:0)

要获取唯一标题的数量,您需要将DISTINCT子句传递给COUNT函数,如下所示:

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

来源:http://www.sqlitetutorial.net/sqlite-count-function/

答案 7 :(得分:0)

对于那些仍在寻找另一种方法的人,我发现获得总行数的更优雅的方法是使用CTE。 这样可以确保只计算一次:

WITH cnt(total) as (SELECT COUNT(*) from xxx) select * from xxx,cnt

唯一的缺点是如果需要WHERE子句,则应在主查询和CTE查询中都应用它。

在第一条评论中,Alttag表示运行2个查询没有问题。我不同意这一点,除非两者都是唯一交易的一部分。如果不是,则可以通过另一个线程/进程中的任何INSERT或DELETE在两个查询之间更改源表。在这种情况下,计数值可能是错误的。