What does "select count(1) from table_name" on any database tables mean?

SqlDatabaseOracle

Sql Problem Overview


When we execute select count(*) from table_name it returns the number of rows.

What does count(1) do? What does 1 signify here? Is this the same as count(*) (as it gives the same result on execution)?

Sql Solutions


Solution 1 - Sql

The parameter to the COUNT function is an expression that is to be evaluated for each row. The COUNT function returns the number of rows for which the expression evaluates to a non-null value. ( * is a special expression that is not evaluated, it simply returns the number of rows.)

There are two additional modifiers for the expression: ALL and DISTINCT. These determine whether duplicates are discarded. Since ALL is the default, your example is the same as count(ALL 1), which means that duplicates are retained.

Since the expression "1" evaluates to non-null for every row, and since you are not removing duplicates, COUNT(1) should always return the same number as COUNT(*).

Solution 2 - Sql

Here is a link that will help answer your questions. In short:

> count(*) is the correct way to write > it and count(1) is OPTIMIZED TO BE > count(*) internally -- since > > a) count the rows where 1 is not null > is less efficient than
> b) count the rows

Solution 3 - Sql

Difference between count(*) and count(1) in oracle?

count(*) means it will count all records i.e each and every cell BUT

count(1) means it will add one pseudo column with value 1 and returns count of all records

Solution 4 - Sql

This is similar to the difference between

SELECT * FROM table_name and SELECT 1 FROM table_name.  

If you do

SELECT 1 FROM table_name

it will give you the number 1 for each row in the table. So yes count(*) and count(1) will provide the same results as will count(8) or count(column_name)

Solution 5 - Sql

There is no difference.

COUNT(1) is basically just counting a constant value 1 column for each row. As other users here have said, it's the same as COUNT(0) or COUNT(42). Any non-NULL value will suffice.

http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789

The Oracle optimizer did apparently use to have bugs in it, which caused the count to be affected by which column you picked and whether it was in an index, so the COUNT(1) convention came into being.

Solution 6 - Sql

SELECT COUNT(1) from <table name>

should do the exact same thing as

SELECT COUNT(*)  from <table name>

There may have been or still be some reasons why it would perform better than SELECT COUNT(*) on some database, but I would consider that a bug in the DB.

SELECT COUNT(col_name) from <table name>

however has a different meaning, as it counts only the rows with a non-null value for the given column.

Solution 7 - Sql

in oracle i believe these have exactly the same meaning

Solution 8 - Sql

You can test like this:

create table test1(
 id number,
 name varchar2(20)
);

insert into test1 values (1,'abc');
insert into test1 values (1,'abc');

select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;

Solution 9 - Sql

Depending on who you ask, some people report that executing select count(1) from random_table; runs faster than select count(*) from random_table. Others claim they are exactly the same.

This link claims that the speed difference between the 2 is due to a FULL TABLE SCAN vs FAST FULL SCAN.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNrjView Question on Stackoverflow
Solution 1 - SqlJeffrey L WhitledgeView Answer on Stackoverflow
Solution 2 - SqlEddie AwadView Answer on Stackoverflow
Solution 3 - SqlrakeshView Answer on Stackoverflow
Solution 4 - SqlChrisHDogView Answer on Stackoverflow
Solution 5 - SqlCade RouxView Answer on Stackoverflow
Solution 6 - SqlThiloView Answer on Stackoverflow
Solution 7 - SqlJarod ElliottView Answer on Stackoverflow
Solution 8 - SqlVikas KumarView Answer on Stackoverflow
Solution 9 - SqlJohann ZachareeView Answer on Stackoverflow