Ответ 1
Если вы хотите использовать MAX (id) вместо count, после прочтения комментариев от Pax, следующий SQL даст вам то, что вы хотите
SELECT COALESCE(MAX(id)+1, 0) FROM words
Я хочу получить несколько строк в таблице, используя 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см. https://www.w3schools.com/sql/sql_count_avg_sum.asp
В SQL, NULL = NULL является ложным, вам обычно нужно использовать 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.
Если вы можете гарантировать, что вы всегда будете от 0 до N, max (id) +1 может быть быстрее в зависимости от реализации индекса (быстрее может пересечь правую сторону сбалансированного дерева, а не перемещаться по всему дереву, считая.
Но это очень специфичное для реализации, и я бы посоветовал не полагаться на него, не в последнюю очередь потому, что он блокирует вашу производительность для конкретной СУБД.
Не уверен, что я понимаю ваш вопрос, но max (id) не даст вам количество строк вообще. Например, если у вас есть только одна строка с id = 13 (допустим, вы удалили предыдущие строки), вы получите max (id) = 13, но количество строк равно 1. Правильное (и самое быстрое) решение - использовать кол-(). Кстати, если вы задаетесь вопросом, почему там звезда, это потому, что вы можете рассчитывать строки на основе критериев.
У меня такая же проблема, если я правильно понимаю ваш вопрос, я хочу знать последний вставленный идентификатор после каждой производительности вставки в SQLite. Я попробовал следующее утверждение:
select * from table_name order by id desc limit 1
Идентификатор - это первый столбец и первичный ключ table_name, указанный оператор показывает мне запись с наибольшим идентификатором.
Но предпосылка - никогда не удаляла ни одну строку, поэтому числа id равны номерам строк.
Расширение ответа VolkerK, чтобы сделать код более читаемым, вы можете использовать AS для ссылки на счетчик, пример ниже:
SELECT COUNT(*) AS c from profile
Это упрощает чтение в некоторых средах, например, я использую интеграцию Sqlite с помощью Exponent (React Native), и без инструкции AS код довольно уродлив.