Неочевидный SQL - count()

Даже если не ищу работу - с удовольствием хожу на собеседования (к слову - рекомендую всем делать это регулярно). И на последнем меня красиво посадили в лужу. Нашёл просто грубейший пробел в своих знаниях - как работает count(), и как ни странно - на качестве моих SQL-запросов это никак не отражалось все эти годы :)

Предположим, что у нас есть такая таблица

id c1
1 null
2 null
3 null
null id
null null

Какие значения для неё вернут count(*), count(1), count(2), count(id), count(‘id’), count(null)?

with t as (
 	          select 1 as id, null as c1
 	union all select 2      , null
    union all select 3      , null
 	union all select null   , 'id'
    union all select null   , null
)
select count(*), count(1), count(2), count(id), count('id'), count(null) 
from t;

Правильный ответ, логику рассуждений, и почему мне это было не важно - напишу после выходных.

Если прямо невтерпёж проверить - специально написал через CTE, копируете и выполняете (например здесь - https://sqliteonline.com/)

Written on November 22, 2024