Подтвердить что ты не робот

Как получить количество строк выбранного результата из sqlite3?

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

один

select * from XXX where XXX;

другой

select count(*) from XXX where XXX; 

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

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

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

4b9b3361

Ответ 1

попробуйте этот путь

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

select count(*), * from XXX where XXX

или

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

Ответ 5

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

Ответ 6

Если вы используете sqlite3_get_table вместо подготовки/шага/завершения, вы получите сразу все результаты в массиве ( "результат table" ), включая номера и имена столбцов и количество строк. Затем вы должны освободить результат с помощью sqlite3_free_table

Ответ 7

Вы должны попробовать следующее:

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

Ответ 8

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

SELECT
 COUNT(DISTINCT column_name)
FROM
 'table_name';

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

Ответ 9

Для тех, кто все еще ищет другой метод, более изящный, который я нашел, чтобы получить общее количество строк, заключался в использовании CTE. это гарантирует, что счет рассчитывается только один раз:

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

единственный недостаток - если требуется предложение WHERE, его следует применять как в основном запросе, так и в запросе CTE.

В первом комментарии Alttag сказал, что нет проблем с выполнением 2 запросов. Я не согласен с этим, если оба не являются частью уникальной сделки. Если нет, исходная таблица может быть изменена между двумя запросами любым INSERT или DELETE из другого потока/процесса. В таком случае значение счетчика может быть неправильным.