Co oznacza "select count (1) from table name" W dowolnej tabeli bazy danych?

Kiedy wykonamy select count(*) from table_name zwraca liczbę wierszy.

Co robi count(1)? Co oznacza 1 tutaj? Czy jest to to samo co count(*) (ponieważ daje ten sam wynik przy wykonaniu)?

Author: morgb, 2008-10-08

9 answers

Parametr funkcji COUNT jest wyrażeniem, które ma być obliczane dla każdego wiersza. Funkcja COUNT Zwraca liczbę wierszy, dla których wyrażenie jest obliczane na wartość inną niż null. (*jest specjalnym wyrażeniem, które nie jest obliczane, po prostu zwraca liczbę wierszy.)

Istnieją dwa dodatkowe modyfikatory wyrażenia: ALL I DISTINCT. Określają one, czy duplikaty są odrzucane. Ponieważ ALL jest domyślne, twój przykład jest taki sam jak count (ALL 1), który oznacza, że duplikaty są zachowywane.

Ponieważ wyrażenie " 1 " jest obliczane na wartość inną niż null dla każdego wiersza i ponieważ nie usuwa się duplikatów, COUNT(1) powinno zawsze zwracać tę samą liczbę co COUNT(*).

 81
Author: Jeffrey L Whitledge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 04:00:28

Oto link , który pomoże odpowiedzieć na twoje pytania. W skrócie:

Count (*) jest poprawnym sposobem zapisu it I count (1) jest zoptymalizowany pod kątem count ( * ) wewnętrznie -- since

A) policz wiersze, w których 1 nie jest null jest mniej wydajny niż
b) policz wiersze

 21
Author: Eddie Awad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 04:01:51

Różnica między count ( * ) a count (1) w oracle?

Count ( * ) oznacza, że zliczy wszystkie rekordy tj. każdą komórkę Ale

Count (1) oznacza, że doda jedną pseudo kolumnę o wartości 1 i zwróci count wszystkich rekordów

 12
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-11 11:00:04

Jest to podobne do różnicy pomiędzy

SELECT * FROM table_name and SELECT 1 FROM table_name.  

If you do

SELECT 1 FROM table_name

Da ci liczbę 1 dla każdego wiersza w tabeli. Tak więc yes count(*) i count(1) zapewnią te same wyniki co will count(8) lub count(column_name)

 6
Author: ChrisHDog,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 13:42:16

Nie ma żadnej różnicy.

COUNT(1) jest w zasadzie tylko zliczanie stałej wartości 1 kolumna dla każdego wiersza. Jak powiedzieli inni użytkownicy, jest to to samo co COUNT(0) lub COUNT(42). Każda wartość nie-NULL wystarczy.

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

Oracle optimizer najwyraźniej używał błędów, które spowodowały, że na liczbę wpływ miała wybrana kolumna i czy była w indeks, więc powstała konwencja COUNT(1).

 5
Author: Cade Roux,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 04:03:12
SELECT COUNT(1) from <table name>

Powinien zrobić dokładnie to samo co

SELECT COUNT(*)  from <table name>

Mogły być lub nadal istnieją powody, dla których byłoby to lepsze niż SELECT COUNT(*) w jakiejś bazie danych, ale uznałbym to za błąd w DB.

SELECT COUNT(col_name) from <table name>

Ma jednak inne znaczenie, ponieważ liczy tylko wiersze z wartością inną niż null dla danej kolumny.

 4
Author: Thilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-03 13:43:27

W wyroczni wierzę, że mają one dokładnie to samo znaczenie

 2
Author: Jarod Elliott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 03:55:04

Możesz przetestować tak:

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;
 2
Author: Vikas Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 13:14:12

W zależności od tego, kogo zapytasz, niektórzy zgłaszają, że wykonywanie select count(1) from random_table; działa szybciej niż select count(*) from random_table. Inni twierdzą, że są dokładnie takie same.

TEN link twierdzi, że różnica prędkości między 2 jest spowodowana pełnym skanowaniem tabeli a szybkim pełnym skanowaniem.

 0
Author: Johann Zacharee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 04:04:11