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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос с подсчетом количества 
:(
    Опции темы
sunnmas
Дата 14.9.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тема похожа на http://forum.vingrad.ru/topic-265234.html,

но немного отличается также есть 2 таблицы: sites, users.

нужно сделать следующее:

Выбрать только те записи, про которые в users написано более 7 раз

Например, пробую запрос:
SELECT sites.index, sites.site, COUNT(*) 
FROM sites, users
WHERE ((sites.index = users.index))
GROUP BY users.index

Выбирает:

index    site                            COUNT(*) 
120    http://www.2piar.net    1
121    http://www.3piar.net    8
122    http://www.4piar.net    5
123    http://www.5piar.net    7

А нужно выбрать:

index    site                            COUNT(*) 
121    http://www.3piar.net    8

P.S.:
SELECT sites.index, sites.site, COUNT(*) 
FROM sites, users
WHERE ((sites.index = users.index) AND COUNT(*)>7)
GROUP BY users.index 

не катит, потому сюда и обращаюсь за помощью, ибо больше ничего в голову не приходит (и не придет видимоsmile
PM MAIL   Вверх
Gudinya
Дата 14.9.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Просто оберни свой запрос
Код

Select * from (
SELECT sites.index, sites.site, COUNT(*) cnt
FROM sites, users
WHERE ((sites.index = users.index))
GROUP BY users.index ) c
where c.cnt > 7


ну или 

Код

SELECT sites.index, sites.site, COUNT(*) cnt
FROM sites, users
WHERE ((sites.index = users.index))
GROUP BY users.index 
Having COUNT(*) >7


Это сообщение отредактировал(а) Gudinya - 14.9.2009, 23:58
PM MAIL ICQ   Вверх
sunnmas
Дата 17.9.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, все получилось. Но появились усложнения.

Есть 2 таблицы, связанные по id:
1 sites:
id  site  

2 users:
id username error (тип enum 0 - нет ошибки, 1,2,3,.. - всякие ошибки) 
========================================================
Нужно получить такую выборку:
id site num_users
Условия для отбора:
Выбрать все сайты для которых есть в users количество записей не больше заданного (у меня 7), причем юзеры, содержащие ошибки в подсчет не должны попадать. Т.е. учитываются только валидные записи. И еще если записей нет в users для сайта, то должен выводиться сайт и num_users=0, т.е. похоже нужно задействовать LEFT JOIN, как в http://forum.vingrad.ru/topic-265234.html

Спасибо заранее





Это сообщение отредактировал(а) sunnmas - 17.9.2009, 15:00
PM MAIL   Вверх
Zloxa
Дата 17.9.2009, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

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



sunnmas
Код

wehre sites.index = users.index
  and users.error = 0
group by users.index
having count(*)>7



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
sunnmas
Дата 17.9.2009, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Полный текст моего запроса

SELECT sites.index, sites.site, users.reg_error, COUNT( users.index ) 
FROM sites
LEFT JOIN users ON sites.index = users.index
WHERE  (users.reg_error<>0)
GROUP BY sites.index
HAVING COUNT( users.index ) <7

Не выполняется: "И еще если записей нет в users для сайта, то должен выводиться сайт и num_users=0"

PS: Я ошибся в прошлом посте в утверждении 
"причем юзеры, содержащие ошибки в подсчет не должны попадать. учитываются только валидные записи". 
Правильное: 
"причем юзеры, содержащие 0 - ошибок нет в подсчет не должны попадать. учитываются только НЕ валидные записи" 

(Уже сам запутался, сорри, не ругайтесь)



Это сообщение отредактировал(а) sunnmas - 17.9.2009, 14:42
PM MAIL   Вверх
sunnmas
Дата 17.9.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



аааа допер))

SELECT sites.index, sites.site, users.reg_error, COUNT( users.index ) 
FROM sites
LEFT JOIN users ON ( (sites.index = users.index)
AND (users.reg_error <>0) ) 
GROUP BY sites.index
HAVING COUNT( users.index ) <7
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




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


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

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