Как получить количество строк выбранного результата из sqlite3? - PullRequest
33 голосов
/ 02 марта 2009

Я хочу получить количество выбранных строк, а также выбранных данных. В настоящее время я должен использовать два оператора SQL:

один

select * from XXX where XXX;

другой

select count(*) from XXX where XXX; 

Может ли это быть реализовано с помощью одной строки sql?

Я проверил исходный код sqlite3 и обнаружил функцию sqlite3_changes(). Но функция полезна только при изменении базы данных (после insert, delete or update).

Может кто-нибудь помочь мне с этой проблемой? Большое спасибо!

Ответы [ 7 ]

15 голосов
/ 06 апреля 2011

попробуйте так

select (select count() from XXX) as count, * 
from XXX;
13 голосов
/ 02 марта 2009

SQL не может смешивать однострочные (подсчет) и многострочные результаты (выбор данных из ваших таблиц). Это обычная проблема с возвратом огромных объемов данных. Вот несколько советов, как справиться с этим:

  • Прочитайте первые N строк и скажите пользователю «доступно более N строк». Не очень точно, но часто достаточно хорошо. Если вы удерживаете курсор открытым, вы можете получить больше данных, когда пользователь достигнет нижней части экрана (это делает Google Reader)

  • Вместо непосредственного выбора данных сначала скопируйте их во временную таблицу. Оператор INSERT вернет количество скопированных строк. Позже вы можете использовать данные во временной таблице для отображения данных. Вы можете добавить «номер строки» во временную таблицу, чтобы сделать подкачку более простой.

  • Извлечение данных в фоновом потоке. Это позволяет пользователю использовать ваше приложение, пока сетка данных или таблица заполняются большим количеством данных.

2 голосов
/ 31 мая 2012
select (select COUNT(0) 
            from xxx t1 
            where t1.b <= t2.b 
            ) as 'Row Number', b from xxx t2 ORDER BY b; 

просто попробуйте это .

1 голос
/ 02 марта 2009

Вы можете объединить их в одно утверждение:

select count(*), * from XXX where XXX

или

select count(*) as MYCOUNT, * from XXX where XXX
0 голосов
/ 27 марта 2019

Чтобы получить количество уникальных заголовков, необходимо передать предложение DISTINCT в функцию COUNT в виде следующего оператора:

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

Источник: http://www.sqlitetutorial.net/sqlite-count-function/

0 голосов
/ 02 марта 2009

Если вы используете sqlite3_get_table вместо prepare / step / finalize, вы получите сразу все результаты в массиве («таблица результатов»), включая номера и имена столбцов, а также количество рядов Затем вы должны освободить результат с sqlite3_free_table

0 голосов
/ 02 марта 2009

Как только у вас уже есть результаты select * from XXX, вы можете просто найти длину массива в вашей программе, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...