Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема подсчета числа результатов запроса, запрос без группировки, не хочет работат 
:(
    Опции темы
Vigoroso
Дата 6.5.2007, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



в таком виде оно работает:
Код

select DATE_FORMAT(min(visitDate), '%Y %m %d') as `date` from page_visit;

но как только я ставлю count
Код

select count(DATE_FORMAT(min(visitDate), '%Y %m %d')) as `date` from page_visit;

пишет что не может осуществить такую группировку
ERROR 1111 (HY000): Invalid use of group function

PM MAIL   Вверх
Kesh
Дата 6.5.2007, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Код
select count(*) from `page_visit`
where `visitDate` = (select min(`visitDate`) from `page_visit`)


Добавлено через 1 минуту и 58 секунд
Код

SELECT count(*) FROM `page_visit` group by `visitDate` asc limit 1;


Добавлено через 7 минут и 54 секунды
На 5000 записях у меня первое работает немного быстрее...
~0,023 сек против ~0,025 сек


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Glip
Дата 6.5.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 473
Регистрация: 30.12.2006

Репутация: 3
Всего: 18



Код

select DATE_FORMAT(min(visitDate), '%Y %m %d') as `date` from page_visit;

min(visitDate) разве не одну строку возвращает? 


--------------------
user posted image
PM MAIL   Вверх
Vigoroso
Дата 6.5.2007, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Цитата(Glip @ 6.5.2007,  13:53)
Код

select DATE_FORMAT(min(visitDate), '%Y %m %d') as `date` from page_visit;

min(visitDate) разве не одну строку возвращает?

возвращает одну, но я не могу понять, почему оно не хочет именно эту единицу мне показывать, мне нужно получить количество, потому что далее пойдет отбор по сессиям
PM MAIL   Вверх
Kesh
Дата 6.5.2007, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



А чем мое не подходит?


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Vigoroso
Дата 6.5.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



я так думал сделать, и скорее всего так и реализую, я просто не могу понять, почему не работает простой каунт??? ведь ничего фантастического я вроде не написал =\
PM MAIL   Вверх
Kesh
Дата 6.5.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Я кучу вариантов перепробовал...
Сочетание count(min()) никак не работает... :(


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Vigoroso
Дата 6.5.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



просто интересно, может у кого-то есть этому объяснение?
PM MAIL   Вверх
skyboy
Дата 6.5.2007, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(Vigoroso @  6.5.2007,  20:36 Найти цитируемый пост)
просто интересно, может у кого-то есть этому объяснение? 

группировка результатов агрегирующей функции? а у тебя "DATE_FORMAT(min(visitDate), '%Y %m %d')" в секции group by есть?(правда, не в курсе - можно ли пихать результаты агрегации в новую агрегацию) Если нету  - тогда ты просишь сгруппировать данные и сгруппировать результаты группировки без явных к тому указаний.
PM MAIL   Вверх
Vigoroso
Дата 6.5.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



то есть что-то типа двойной группировки?

Добавлено через 59 секунд
как сделать так, чтобы оно сработало?
PM MAIL   Вверх
skyboy
Дата 6.5.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Vigoroso, попробуй добавить "GROUP BY visitDate, min(visitDate)".
 Скорее всего, не сработает и количество строк придется брать на стороне клиента. Или делать подзапрос.
PM MAIL   Вверх
Vigoroso
Дата 7.5.2007, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 17.6.2006

Репутация: нет
Всего: нет



Цитата(skyboy @ 6.5.2007,  23:44)
Vigoroso, попробуй добавить "GROUP BY visitDate, min(visitDate)".
 Скорее всего, не сработает и количество строк придется брать на стороне клиента. Или делать подзапрос.

подзапросом реализовал, как вариант можно использовать "having" но почему-то у меня при этом терялись записи
PM MAIL   Вверх
skyboy
Дата 7.5.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(Vigoroso @  7.5.2007,  20:39 Найти цитируемый пост)
"having"

это же фильтрация(как WHERE), a не группировка...
PM MAIL   Вверх
Ignat
Дата 8.5.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



А так?

Код

SELECT SQL_CALC_FOUND_ROWS DATE_FORMAT(min(visitDate), '%Y %m %d') as `date` from page_visit;
SELECT FOUND_ROWS();


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


--------------------
Теперь при чем :P
PM   Вверх
muzer
Дата 9.5.2007, 02:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 387
Регистрация: 31.8.2006

Репутация: 30
Всего: 31



Цитата(Vigoroso @  6.5.2007,  12:50 Найти цитируемый пост)
но как только я ставлю count
Код

select count(DATE_FORMAT(min(visitDate), '%Y %m %d')) as `date` from page_visit;


пишет что не может осуществить такую группировку

А вы что посчитать-то пытаетесь??? 
Смотрите, что вы написали: "уважаемый mysql, вычисли мне, пожалуйста, минимальное значение поля visitDate в таблице page_visit, преобразуй его в заданный мной формат, а потом скажи, сколько не NULL значений ты вычислил". Так по определению минимальная дата может быть только одна, если строки есть, или ноль если строк в таблице нет.

Если вам нужно кол-во строк с минимальной датой, то это будет совершенно другой запрос. И почти обязательно с подзапросом.
Например 
Код

SELECT COUNT(*) FROM page_visit INNER JOIN (SELECT MIN(visitDate) FROM page_visit) tmp USING(visitDate);

Или
Код

SELECT COUNT(*) FROM page_visit WHERE visitDate = (SELECT MIN(visitDate) FROM page_visit);

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.