SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.04.2009 23:47:40

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Два count в одном запросе

Попробовал несколько вариантов, всё никак не могу правильно составить запрос. Помогите, пожалуйста:

select f.id,f.fprice,f.fcount, count(c1.id), count(c2.id)
from molfeed f
left join molvotes c1 on f.id=c1.lot and c1.type=1
left join molvotes c2 on f.id=c2.lot and c2.type=0
group by f.id


Задача примерно такова - есть список товаров, и таблица с положительными и отрицательными отзывами о них. Хочется одним запросом забирать количество как положительных, так и отрицательных отзывов. Проблема в том, что при такой конструкции запроса как я показал выше, подсчёт ведётся неверно: я просто вижу, что сумма цифр последних двух столбцов превышает количество записей в таблице отзывов. Подскажите, пожалуйста, как составить запрос, чтобы в нём поучаствовали 2 count для одной таблицы.

Неактивен

 

#2 27.04.2009 00:07:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Два count в одном запросе

Используйте COUNT(DISTINCT c1.id)

Неактивен

 

#3 29.04.2009 22:21:22

Lem0nti
Гуру
Откуда: Северная Пальмира
Зарегистрирован: 08.11.2007
Сообщений: 98

Re: Два count в одном запросе

Точно, именно оно, спасибо.

А не могли бы вы пояснить почему появлялся эффект с лишним количеством без использования distinct?

Неактивен

 

#4 29.04.2009 23:54:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Два count в одном запросе

сделайте такой же запрос без count, увидите, что так как это JOIN, то в нем присутствует N x M строк, если N разных id1 и M разных id2. count все эти N x M строк и должен посчитать

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson