SELECT *, COUNT (*) в SQLite
Если я выполняю стандартный запрос в SQLite:
SELECT * FROM my_table
Я получаю все записи в своей таблице, как и ожидалось. Если я выполнил следующий запрос:
SELECT *, 1 FROM my_table
Я получаю все записи, как ожидалось, с самой правой колонкой, содержащей "1" во всех записях. Но если я выполню запрос:
SELECT *, COUNT(*) FROM my_table
Я получаю только ОДНУЮ строку (с самым правильным столбцом - правильный счет).
Почему такие результаты? Я не очень хорошо разбираюсь в SQL, возможно, такое поведение ожидается? Мне кажется очень странным и нелогичным: (.
Ответы
Ответ 1
SELECT *, COUNT(*) FROM my_table
- это не то, что вы хотите, и это не действительно правильный SQL, вам нужно группировать все столбцы, которые не являются агрегатами.
Вам нужно что-то вроде
SELECT somecolumn,someothercolumn, COUNT(*)
FROM my_table
GROUP BY somecolumn,someothercolumn
Ответ 2
Если вы хотите подсчитать количество записей в таблице, просто запустите:
SELECT COUNT(*) FROM your_table;
Ответ 3
count (*) является агрегированной функцией. Совокупные функции должны быть сгруппированы для значимых результатов. Вы можете прочитать: подсчитать группу столбцов.
Ответ 4
Если вам нужно общее количество записей в таблице, добавленной к каждой строке, вы можете сделать что-то вроде
SELECT *
FROM my_table
CROSS JOIN (SELECT COUNT(*) AS COUNT_OF_RECS_IN_MY_TABLE
FROM MY_TABLE)