Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.10.01;
Скачать: CL | DM;

Вниз

count (таблица.*)   Найти похожие ветки 

 
Цукор5   (2011-08-29 13:01) [0]

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

Здесь все работает.
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


 
Цукор5   (2011-08-29 13:18) [1]

Пардон, уже не надо.
Там оказывается нужно поставить вместо звезды любое поле и всё заработает.
Типа так:
select count(t1.ID), t2.Name from Table1 t1, Table2 t2 where t1.IdName=t2.Id group by t2.name


 
Sergey13 ©   (2011-08-29 13:27) [2]

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

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


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

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


 
Sergey13 ©   (2011-08-29 14:04) [4]

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

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


 
Anatoly Podgoretsky ©   (2011-08-29 16:57) [5]


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

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


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


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

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


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

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


 
Anatoly Podgoretsky ©   (2011-08-30 19:02) [8]

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

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


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


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


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


 
Anatoly Podgoretsky ©   (2011-08-30 22:48) [10]

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

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


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

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


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

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


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


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


Почему ?


 
Anatoly Podgoretsky ©   (2011-09-06 08:39) [14]

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

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


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

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


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


> 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                                                                      


 
Anatoly Podgoretsky ©   (2011-09-06 12:29) [17]

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

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


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

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


 
Anatoly Podgoretsky ©   (2011-09-06 13:45) [19]

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

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


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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2017.10.01;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.004 c
15-1465914259
pavel_guzhanov
2016-06-14 17:24
2017.10.01
Вопрос про флешку


2-1446463756
Валя
2015-11-02 14:29
2017.10.01
прокуртка кнопок


2-1446719068
Евгений Медведев
2015-11-05 13:24
2017.10.01
ошибка при запуске экзэшника


3-1314608477
Цукор5
2011-08-29 13:01
2017.10.01
count (таблица.*)


2-1446543628
Gedevan
2015-11-03 12:40
2017.10.01
Как программно назначить форме событие Oncreate?