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

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

проблема с запросом (count(*)+group by)


SergP. ©   (2006-07-26 11:30:00) 

Пишу так:
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 вложенные запросы не поддерживает.
Как выйти из положения?


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

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


sniknik   (2006-07-26 12:30:00) [2]

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


ЮЮ   (2006-07-26 12:27:00) [3]

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


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

> 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:13:00) [5]

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


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

> Значит текст начиная с символов "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:08:00) [7]

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


sniknik   (2006-07-26 12:06:00) [8]

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

select count(distinct Zone_Id) from TrafficH


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


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

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

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


Sergey13   (2006-07-26 12:04:00) [10]

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

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


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

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


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

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


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


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

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


Sergey13   (2006-07-26 11:53:00) [13]

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

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


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

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


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

> [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


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


Sergey13   (2006-07-26 11:34:00) [16]

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


Наверх

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