![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с запросом (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