| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > Запрос с подсчетом количества |
| Автор: sunnmas 14.9.2009, 20:07 |
| Тема похожа на 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 не катит, потому сюда и обращаюсь за помощью, ибо больше ничего в голову не приходит (и не придет видимо |
| Автор: Gudinya 14.9.2009, 20:18 | ||||
Просто оберни свой запрос
ну или
|
| Автор: sunnmas 17.9.2009, 12:56 |
| Спасибо, все получилось. Но появились усложнения. Есть 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 Спасибо заранее |
| Автор: Zloxa 17.9.2009, 13:01 | ||
sunnmas
|
| Автор: sunnmas 17.9.2009, 14:36 |
| Полный текст моего запроса 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, 15:05 |
| аааа допер)) 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 |