Я не понимаю, как SQL выяснить, что COUNT (*) равно COUNT (w.channel)
COUNT()
- это функция агрегирования, которая подсчитывает число строки, соответствующие условию. На самом деле, COUNT(<expression>)
в целом (или COUNT(column)
в частности) подсчитывает количество строк, в которых выражение (или столбец) не равно NULL
.
В общем, следующее делает точно то же самое:
COUNT(*)
COUNT(1)
COUNT(<primary key used on inner join>)
В общем, Я предпочитаю COUNT(*)
, потому что это стандарт SQL для этого. Я могу принять COUNT(1)
в качестве признания того, что COUNT(*)
- это просто функция раздувания. Тем не менее, я не вижу смысла использовать третью версию, потому что она просто требует избыточного набора текста.
Более того, я считаю, что новые пользователи часто путаются между этими двумя конструкциями:
COUNT(w.channel)
COUNT(DISTINCT w.channel)
Люди, изучающие SQL, часто думают, что первое действительно делает второе. По этой причине я рекомендую придерживаться более простых способов подсчета строк. Затем используйте COUNT(DISTINCT)
, когда вы действительно хотите получить накладные расходы для подсчета уникальных значений (COUNT(DISTINCT)
дороже COUNT()
).