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

Вниз

проблема с запросом (count(*)+group by)   Найти похожие ветки 

 
SergP.   (2006-07-26 11:30) [0]

Пишу так:
select count(*) from TrafficH where  Client_ID=7 group by Zone_Id,Year,Month,Day

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

Он возвращает несколько записей, а мне нужно именно количество последних.

т.е. по идее можно было бы сделать так:
select count(*) from
(select count(*) from TrafficH where  Client_ID=7 group by Zone_Id,Year,Month,Day)

Но имеющаяся у меня версия MySQL вложенные запросы не поддерживает.
Как выйти из положения?


 
Sergey13 ©   (2006-07-26 11:34) [1]

select Zone_Id,Year,Month,Day,count(*)
from TrafficH
where  Client_ID=7
group by Zone_Id,Year,Month,Day


 
SergP.   (2006-07-26 11:38) [2]

> [1] Sergey13 ©   (26.07.06 11:34)
> select Zone_Id,Year,Month,Day,count(*)
> from TrafficH
> where  Client_ID=7
> group by Zone_Id,Year,Month,Day


Неа... Мне нужно получить количество записей которые возвращает данный запрос...


 
SergP.   (2006-07-26 11:42) [3]

В принципе я могу просто выполнить
select count(*) from TrafficH where  Client_ID=7 group by Zone_Id,Year,Month,Day
и потом получить требуемое число через mysql_numrows   (на PHP скрипт пишу)
но как-то нехорошо получается... Ведь кол-во записей может быть большое...


 
Sergey13 ©   (2006-07-26 11:53) [4]

> [3] SergP.   (26.07.06 11:42)

Зачем тебе группировка в исходном запросе? Странный он какой-то вообще.


 
Плохиш ©   (2006-07-26 12:00) [5]


> SergP.   (26.07.06 11:30)  
> Пишу так:
> select count(*) from TrafficH where  Client_ID=7 group by
> Zone_Id,Year,Month,Day
>
> Но оказывается такой запрос делает не то что мне нужно.
>
> Он возвращает несколько записей, а мне нужно именно количество
> последних
.

Значит текст начиная с символов "group by" надо отбросить.


 
SergP.   (2006-07-26 12:02) [6]

> [4] Sergey13 ©   (26.07.06 11:53)
> > [3] SergP.   (26.07.06 11:42)
>
> Зачем тебе группировка в исходном запросе? Странный он какой-
> то вообще.


Почему странный?

Нужно узнать не количество сгрупированных записей по каждой из групп, как вышеупомянутые запросы делают, а количество групп


 
Плохиш ©   (2006-07-26 12:04) [7]


> Но имеющаяся у меня версия MySQL вложенные запросы не поддерживает.

Значит нужно установить ту, которая поддерживает.

PS. На основании [6] ответ [5] снимается :-)


 
Sergey13 ©   (2006-07-26 12:04) [8]

> [6] SergP.   (26.07.06 12:02)

У тебя получается:
"Если бы к глазам Иван Инваныча приделать нос Иван Егорыча..."
Свой запрос надо писать.


 
sniknik ©   (2006-07-26 12:06) [9]

> а количество групп
возможно пройдет чтото вроде этого (смутно припоминается от того времени что тестил MySql)

select count(distinct Zone_Id) from TrafficH


 
ЮЮ ©   (2006-07-26 12:08) [10]

a COUNT(DISTINCT Zone_Id + Year + Month + Day ) поддерживает?
+ здесь, естественно утрировано. имеется ввиду сцепление символьных представлений


 
SergP.   (2006-07-26 12:09) [11]

> Значит текст начиная с символов "group by" надо отбросить.


Допустим есть таблица:

field
1
2
3
1
2
1
2
7

Если делать select field, count(*) from table group by field

то получим, что-то типа:

field  count
1      3
2      3
3      1
7      1


Т.е. 4 записи и в каждой кол-во сгрупированых по данной группе.

А мне нужно получить кол-во групп, т.е. в данном случае это будет 4


 
ЮЮ ©   (2006-07-26 12:13) [12]

как насчет
 SELECT COUNT(DISTINCT field)
поддерживает?


 
SergP.   (2006-07-26 12:16) [13]

> a COUNT(DISTINCT Zone_Id + Year + Month + Day ) поддерживает?


О... это оно...Вот только данные поля у меня числовые...

С учетом размерности полей, вот такое:
select COUNT(DISTINCT 100000000*Zone_Id + 10000*Year + 100*Month + Day )
from TrafficH
where  Client_ID=7

работает нормально... (просто я не помню функции как число перевести в символьное представление на MySQL, хотя не мешало бы так сделать)
Может кто подскажет?
Хотя имхо


 
ЮЮ ©   (2006-07-26 12:27) [14]

100000000*Zone_Id + 10000*Year + 100*Month + Day, пожалуй, не хуже  символьного представления будет. Я имел в виду именно то, что ты исделал, однозначно представить 4 поля как 1


 
sniknik ©   (2006-07-26 12:30) [15]

> хотя не мешало бы так сделать
зачем? притормозить его хочеш? строковые операции медленнее числовых.


 
partizan   (2006-07-26 12:51) [16]

А чем плохо просто написать count( distinct f1,f2,f3)?
Вроде работает.



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

Форум: "Базы";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.042 c
3-1153590836
WhiteCat
2006-07-22 21:53
2006.09.24
Новая база


15-1157607635
Иксик
2006-09-07 09:40
2006.09.24
Наши люди :)


2-1157101444
nikv
2006-09-01 13:04
2006.09.24
GetFileSize


15-1157621569
Delphi basic
2006-09-07 13:32
2006.09.24
Кто как придумывает названия разрабатываемым программам?


15-1157197093
Stexen
2006-09-02 15:38
2006.09.24
VC++ и дельфи





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский