LINUX.ORG.RU

Как работает count(*) в SQL?

 ,


0

1

Вернет кол-во строк в таблице. На этом можно было бы закончить. Размышляя на эту тему, сделал следующие выводы.

1)Этот запрос каждой строке добавит еще один атрибут(одну колонку) и установить значение 999. Потом посчитает кол-во 999 в этом столбце. т.е для любого числа в скобках вернет кол-во строк.

select count(999) from table1;

2)А вот этот запрос установит звездочку каждой строке и посчитает позже кол-во звездочек.

select count(*) from table1;

3)Посчитать кол-во значений в столбце col1, игнорируя null. Здесь не создается столбец, т.к понятно на основе какого столбца расчеты проводить.

select count(col1) from table1;

Я правильно понимаю, что * - это не все столбцы выбрать для каждой строки и посчитать строки, а логика работает как во 2-м пункте?

Еще начитался на эту тему, некоторые в своих статьях как это работает указывают что число в скобках - это номер столбца, не говоря про СУБД. Это правда для некоторых СУБД номер столбца?

Подискутируем?


Это правда для некоторых СУБД номер столбца?

Только для каких-нибудь больных. В РБД здорового человека принципиально не важен порядок строк или столбцов.

Я правильно понимаю, что * - это не все столбцы выбрать для каждой строки и посчитать строки, а логика работает как во 2-м пункте?
А вот этот запрос установит звездочку каждой строке и посчитает позже кол-во звездочек.
звездочек

Щта?

//oracle:
SELECT count(f) FROM (SELECT NULL AS f FROM dual)
>>0
SELECT count(*) FROM (SELECT NULL AS f FROM dual)
>>1
SELECT count(null) from dual
>>0
Вроде бы нет никакой разницы, между count(*) и count(1). Пишут, что * тупо считает всё строки в таблице и она может брать их из индекса по идее, в то время, как count(1) будет что-то там потенциально пытаться считать, если не будет съедена оптимизатором.

Этот запрос каждой строке добавит еще один атрибут(одну колонку) и установить значение 999

Нет. Она в функцию count каждый раз передаёт это значение.

crutch_master ★★★★★
()

Подискутируем?

О чём? Sql - декларативный язык, как он работает целиком зависит от номера сборки субд.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Once again, the result is the same. So what does the value in the parenthesis of COUNT() mean? It’s the value that the COUNT() function will assign to every row in the table. The function will then count how many times the asterisk (*) or (1) or (-13) has been assigned.

[url]https://learnsql.com/blog/difference-between-count-distinct/[/url]

KRex
() автор топика
Ответ на: комментарий от KRex

The function will then count how many times the asterisk (*) or (1) or (-13) has been assigned.
SELECT count(null) from dual
0

В общем случае сount считает сколько раз в него попало not null значение. Есть множество случаев, когда count ничего не считает, таблицу не дрочит, а просто смотрит в индекс, например.

crutch_master ★★★★★
()
Ответ на: комментарий от KRex

звездочка это not null? что это?

Звёздочка - это какой-то архаизм, который съедается оптимизатором. Попробуй передать её в любую другую функцию.

crutch_master ★★★★★
()
Ответ на: комментарий от KRex

Звездочка - это часть синтаксической конструкции для count (а не архаика, как некоторые тут говорят).

count это не ф-ция, а синтаксическая конструкция , указывающая что и как ты хочешь посчитать. Оптимизатор уже сам строит план запроса.

Psilocybe ★★★★
()
Ответ на: комментарий от Psilocybe

Звездочка - это часть синтаксической конструкции

Вот то-то и оно, что такие синтаксические конструкции sql - архаичная бредятина. А всё из-за того, что нормального стандарта нет и каждый традиционно лепит что-то, подпирая своими особыми костылями.

crutch_master ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.