Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2017.10.01;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.001 c
3-1314608477
Цукор5
2011-08-29 13:01
2017.10.01
count (таблица.*)


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


4-1283746765
SPeller
2010-09-06 08:19
2017.10.01
Как определить что программа запущена в режиме RemoteApp?


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


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский