Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

count (таблица.*) [FB]


Страницы:   1 2

Цукор5 ©   (2011-08-29 13:01:00) 

Как-то подзабыл синтаксис. Как писать правильно?

Здесь все работает.
select COUNT(*), IdName from Table1 group by IdName

А здесь не работает.
select count( t1.*), t2.Name from Table1 t1, Table2 t2 where t1.IdName=t2.Id group by t2.name


Anatoly Podgoretsky   (2011-09-06 16:21:00) [1]

> Vitalts  (06.09.2011 14:19:20)  [20]

Откуда? Должна подверждать. Не может быть со сравнением и без быть
одинаково, особенно на крупной таблице.


Vitalts   (2011-09-06 14:19:00) [2]

Практика этого не подтверждает. Сравнение естественно есть, но поскольку значение статическое, то лишь единожды.


Anatoly Podgoretsky   (2011-09-06 13:45:00) [3]

> Vitalts  (06.09.2011 13:32:18)  [18]

<статическое значение> это и есть указание поля, значит медленнее.


Vitalts   (2011-09-06 13:32:00) [4]

Хм, по поводу count(*) был не прав, учитывает все записи без разбора, соответсвенно должно также быстро работать как и count(<статическое значение>)


Anatoly Podgoretsky   (2011-09-06 12:29:00) [5]

> Vitalts  (06.09.2011 08:44:15)  [15]

Противоречит большинству СУБД и стандарту. Если поле указано, а оно указано
в каноническом виде, то обязано проверять, или это какая то кривая СУБД


Игорь Шевченко   (2011-09-06 12:26:00) [6]


> count(1) (или другое статическое число)  считает кол-во
> записей без проверок NULL значений, потому и быстрее.


а в * что на NULL проверяется ?

SQL> CREATE TABLE foo (
 2    bar int
 3  );

Table created.

SQL>
SQL> INSERT INTO foo VALUES (NULL);

1 row created.

SQL> INSERT INTO foo VALUES (NULL);

1 row created.

SQL> INSERT INTO foo VALUES(10);

1 row created.

SQL> COMMIT;

Commit complete.

SQL> SELECT COUNT(*) FROM foo;

 COUNT(*)                                                                      
----------                                                                      
        3                                                                      

SQL> SELECT COUNT(1) FROM foo;

 COUNT(1)                                                                      
----------                                                                      
        3                                                                      

SQL> SELECT COUNT(bar) FROM foo;

COUNT(BAR)                                                                      
----------                                                                      
        1                                                                      


Vitalts   (2011-09-06 08:44:00) [7]

count(1) (или другое статическое число)  считает кол-во записей без проверок NULL значений, потому и быстрее.
[quote]
Таки наверное не любое, а уникальное? Иначе, ИМХО, можно получить странное.[/quote]
Вот это странное - и есть count() полю, содержадему NULL значения, он возвращает кол-во не нулевых значений этого поля, а не общее кол-во записей.


Anatoly Podgoretsky   (2011-09-06 08:39:00) [8]

> Игорь Шевченко  (05.09.2011 16:54:13)  [13]

А должно медленнее, ведь при этом подсчеты требуются дополнительные
действия, проверка на NULL


Игорь Шевченко   (2011-09-05 16:54:00) [9]


> Count(1), кстати, работает быстрее, нежели count(*)


Почему ?


Vitalts   (2011-09-05 15:41:00) [10]

Count(1), кстати, работает быстрее, нежели count(*)


Vitalts   (2011-09-05 15:34:00) [11]

Count не учитывает NULL значения, посему, либо по полю, в котором наверняка не пустые значения, либо, что мне больше всего импонирует count(1)


Anatoly Podgoretsky   (2011-08-30 22:48:00) [12]

> Игорь Шевченко  (30.08.2011 19:56:09)  [9]

Слава богу, что основные сервера как правило не отличаются от стандарта, в
основном добавлением своих функций, count у всех работает одинаково, по
стандарту.


Игорь Шевченко   (2011-08-30 19:56:00) [13]


> Ну я многое видел в MySQL которое не то что не по стандарту,
>  а резко
> отличается даже от здравого смысла.


Еще были всякие Raima (Velocis), Gupta и прочие со своими изобретениями.


Anatoly Podgoretsky   (2011-08-30 19:02:00) [14]

> Игорь Шевченко  (29.08.2011 22:52:07)  [7]

Ну я многое видел в MySQL которое не то что не по стандарту, а резко
отличается даже от здравого смысла.


Игорь Шевченко   (2011-08-29 22:52:00) [15]

Вроде как поведение COUNT в стандарте чуть ли не с SQL-86 описано и все производители DBMS этого стандарта придерживаются


Anatoly Podgoretsky   (2011-08-29 16:58:00) [16]


> Там оказывается нужно поставить вместо звезды любое поле
> и всё заработает.

Результаты могут быть совсем другие.


Anatoly Podgoretsky   (2011-08-29 16:57:00) [17]


> Таки наверное не любое, а уникальное? Иначе, ИМХО, можно
> получить странное.

Так разницы не будет по сравнению со звездочкой


Sergey13   (2011-08-29 14:04:00) [18]

> [3] Кщд   (29.08.11 13:52)

Сейчас проверил - вроде и на самом деле любое можно. Но почему то по привычке уже count(id) всегда ставлю на автомате в подобных случаях.


Кщд   (2011-08-29 13:52:00) [19]

>Sergey13 ©   (29.08.11 13:27) [2]
>Таки наверное не любое, а уникальное?
почему?


Sergey13   (2011-08-29 13:27:00) [20]

> [1] Цукор5   (29.08.11 13:18)
> Там оказывается нужно поставить вместо звезды любое поле и всё заработает.

Таки наверное не любое, а уникальное? Иначе, ИМХО, можно получить странное.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо