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)?
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(*).
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
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
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)
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).
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.
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
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;
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.
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