2010-09-01 2 views
21

Если я выполнить стандартный запрос в SQLite:SELECT *, COUNT (*) в SQLite

SELECT * FROM my_table 

Я получаю все записи в моей таблице, как ожидалось. Если я сделаю следующий запрос:

SELECT *, 1 FROM my_table 

Я получаю все записи, как ожидалось, с самым правым столбцом, держащим «1» во всех записях. Но если я выполняю запрос:

SELECT *, COUNT(*) FROM my_table 

Я получаю только ОДНУЮ строку (с самым правильным столбцом - правильный счет). Почему такие результаты? Я не очень хорошо разбираюсь в SQL, возможно, такое поведение ожидается? Это кажется очень странным и unlogical мне :(.

ответ

26

SELECT *, COUNT(*) FROM my_table не то, что вы хотите, и это на самом деле не действует SQL, вы должны сгруппировать все столбцы, которые не агрегат.

Вы бы хотели что-то вроде

SELECT somecolumn,someothercolumn, COUNT(*) 
    FROM my_table 
GROUP BY somecolumn,someothercolumn 
+2

SQLite help on aggregate functions (sqlite.org/lang_aggfunc.html) ничего не знает об 'group by' :(. Я могу описать некоторую документацию об этом ограничении для лучшего понимания? – grigoryvp

+2

@Eye of Hell any книга на SQL будет делать, это ничего особенного sqlite. – nos

+1

этот ответ привел меня к этой странице документации SQLite на наборах результатов, включая GROUP BY: https://www.sqlite.org/lang_select.html#resultset – devnul3

9

COUNT (*) представляет собой совокупность функций Агрегатные функции должны быть сгруппированы в течение значимых результатов Вы можете прочитать:.. count columns group by

+1

SQLite help on aggregate функции (http://www.sqlite.org/lang_aggfunc.html) не имеют ничего о «group by» :(. Является ли какая-то документация, которую я могу прочитать об этом ограничении для лучшего понимания? – grigoryvp

+0

Документация SQLite говорит: в группе «/» в группе ». Предлагаю прочитать учебное пособие или книгу о SQL. –

+0

@EyeofHell only count() - это совокупная функция GROUP BY является частью синтаксиса SELECT. http://sqlite.org/lang_select.html – XTL

13

Если вы ш муравей подсчитать количество записей в таблице, просто запустите:

SELECT COUNT(*) FROM your_table; 
5

Если то, что вы хотите, общее количество записей в таблице, прилагаемой к каждой строке вы можете сделать что-то вроде

SELECT * 
    FROM my_table 
    CROSS JOIN (SELECT COUNT(*) AS COUNT_OF_RECS_IN_MY_TABLE 
       FROM MY_TABLE) 

Поделитесь и наслаждайтесь.