SQL, проблема с группировкой
Подскажите пож, уже много часов бьюсь над проблемой, возможно чего-то не понимаю.
Есть таблицы
cat(id, title) - к примеру таблица одноуровневых категорий
cat_stat(cat_id, num, date) - статистика категории с каким-то абстрактным счетчиком, меняющимся со временем, примари кей на cat_id и date)
item(id, title) - какие-то данные, связанные с категориями, впринципе на эту таблицу вообще пофиг, просто для наглядности
cat_item(cat_id, item_id) - таблица связей предыдущей таблицы с категориями
Итак, в таблице cat_stat пишется какая-то инфа несколько раз в сутки для каждой категории, для того чтобы отслеживать изменение счетчика по времени, все обычно. Есть задача - получить список категорий с количеством item_id в таблице связей и суммой счетчиков из таблицы статистики (хотя пофигу на самом деле на сумму, можно и просто count(*) из той таблицы). Вобщем две групповые функции для двух таблиц которые джойнятся к первой. Казалось бы всё просто, НО - количество записей из таблицы cat_item умножается на количество записей в таблице статистики! Спрашивается почему и как это исправить?
Запрос:
SELECT c.id, COUNT(ci.item_id), SUM(cs.num)
FROM cat c, cat_item ci, cat_stat cs
WHERE c.id=ci.cat_id AND c.id=cs.cat_id
GROUP BY c.id
Еще раз - значение COUNT(ct.item_id) умножается на количество записей в cat_stat! Тоесть если в cat_item 3 записи для какой-то категории, а в cat_stat - 4 записи, то COUNT(ct.item_id) = 3*4 = 12, значение SUM(cs.num) также складывается 12 раз! Поясните, если я что-то в группировке не понимаю.
|