count(*) vs count(column-name) - which is more correct? [duplicate]
Does it make a difference if you do count(*)
vs count(column-name)
as in these two examples?
I have a tendency to always write count(*)
because it seems to fit better in my mind with the notion of it being an aggregate function, if that makes sense.
But I'm not sure if it's technically best as I tend to see example code written without the *
more often than not.
count(*):
select customerid, count(*), sum(price)
from items_ordered
group by customerid
having count(*) > 1;
vs. count(column-name):
SELECT customerid, count(customerid), sum(price)
FROM items_ordered
GROUP BY customerid
HAVING count(customerid) > 1;
-
COUNT(*)
counts all rows -
COUNT(column)
counts non-NULLs only -
COUNT(1)
is the same asCOUNT(*)
because 1 is a non-null expressions
Your use of COUNT(*)
or COUNT(column)
should be based on the desired output only.
This applies to MySQL. I'm not sure about the others.
The difference is:
-
COUNT(*)
will count the number of records. -
COUNT(column_name)
will count the number of records where column_name is not null.
Therefore COUNT(*)
is what you should use. If you're using MyISAM and there is no WHERE
clause, then the optimiser doesn't even have to look at the table, since the number of rows is already cached.
When it's an identifier (and guaranteed to be non-NULL
) then it probably doesn't matter.
However, there is a difference between COUNT(*)
and COUNT(column)
in general, in that COUNT(column)
will return a count of the non-NULL
values in the column. There is also the COUNT(DISTINCT column)
variant which returns the number of unique, non-NULL
values.
Generally it's the same, but in details AFAIK "count(*)" is better b/c "count(columnname)" forces DB to execute a little more code to lookup that column name (but not necessary though).