Что означает «выбрать количество (1) из таблицы_имя» в любой таблице базы данных?

Когда мы выполняем select count(*) from table_name, он возвращает количество строк.

Что делает count(1)? Что здесь означает 1? Это то же самое, что и count(*) (поскольку при выполнении он дает тот же результат)?

74 голоса | спросил Nrj 8 +04002008-10-08T07:52:13+04:00312008bEurope/MoscowWed, 08 Oct 2008 07:52:13 +0400 2008, 07:52:13

8 ответов


0

Параметром функции COUNT является выражение, которое должно оцениваться для каждой строки. Функция COUNT возвращает количество строк, для которых выражение оценивается как ненулевое значение. (* это специальное выражение, которое не оценивается, оно просто возвращает количество строк.)

Для выражения есть два дополнительных модификатора: ALL и DISTINCT. Они определяют, отбрасываются ли дубликаты. Поскольку ALL является значением по умолчанию, ваш пример совпадает с count (ALL 1), что означает, что дубликаты сохраняются.

Поскольку выражение "1" оценивается как ненулевое для каждой строки и поскольку вы не удаляете дубликаты, COUNT (1) всегда должен возвращать то же число, что и COUNT (*).

ответил Jeffrey L Whitledge 8 +04002008-10-08T08:00:28+04:00312008bEurope/MoscowWed, 08 Oct 2008 08:00:28 +0400 2008, 08:00:28
0

Разница между количеством (*) и числом (1) в оракуле?

count (*) означает, что он будет считать все записи, т.е. каждую ячейку НО

count (1) означает, что он добавит один псевдостолбец со значением 1 и вернет счетчик всех записей

ответил 11 22008vEurope/Moscow11bEurope/MoscowTue, 11 Nov 2008 14:00:04 +0300 2008, 14:00:04
0

Это похоже на разницу между

SELECT * FROM table_name and SELECT 1 FROM table_name.  

Если вы делаете

SELECT 1 FROM table_name

он даст вам номер 1 для каждой строки в таблице. Так что да, count(*) и count(1) обеспечат те же результаты, что и count(8) или count(column_name)

ответил ChrisHDog 8 +04002008-10-08T07:57:09+04:00312008bEurope/MoscowWed, 08 Oct 2008 07:57:09 +0400 2008, 07:57:09
0

Разницы нет.

COUNT(1) в основном просто считает столбец с постоянным значением 1 для каждой строки. Как уже говорили другие пользователи, это то же самое, что и COUNT(0) или COUNT(42). Подойдет любое не NULL значение.

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

Оптимизатор Oracle, по-видимому, использовал для того, чтобы в нем были ошибки, из-за которых на счетчик влияло то, какой столбец вы выбрали, и был ли он в индексе, поэтому появилось соглашение COUNT (1).

ответил Cade Roux 8 +04002008-10-08T07:57:23+04:00312008bEurope/MoscowWed, 08 Oct 2008 07:57:23 +0400 2008, 07:57:23
0
SELECT COUNT(1) from <table name>

должен делать то же самое, что и

SELECT COUNT(*)  from <table name>

Возможно, были или все еще есть некоторые причины, по которым он будет работать лучше, чем SELECT COUNT(*) в некоторой базе данных, но я считаю, что ошибка в БД.

SELECT COUNT(col_name) from <table name>

, однако, имеет другое значение, так как он считает только строки с ненулевым значением для данного столбца.

ответил Thilo 8 +04002008-10-08T08:01:15+04:00312008bEurope/MoscowWed, 08 Oct 2008 08:01:15 +0400 2008, 08:01:15
0

В оракуле я считаю, что они имеют точно такое же значение

ответил Jarod Elliott 8 +04002008-10-08T07:55:04+04:00312008bEurope/MoscowWed, 08 Oct 2008 07:55:04 +0400 2008, 07:55:04
0

Вы можете проверить это так:

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;
ответил Vikas Kumar 1 PMpTue, 01 Apr 2014 16:55:56 +040055Tuesday 2014, 16:55:56
0

В зависимости от того, кого вы спрашиваете, некоторые люди сообщают, что выполнение select count(1) from random_table; выполняется быстрее, чем select count(*) from random_table. Другие утверждают, что они точно такие же.

ссылка утверждает, что разница в скорости между этими двумя значениями обусловлена ​​полным просмотром таблицы и быстрым полным просмотром.

ответил Johann Zacharee 8 +04002008-10-08T08:04:11+04:00312008bEurope/MoscowWed, 08 Oct 2008 08:04:11 +0400 2008, 08:04:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132