Показать сообщение отдельно
  #1 (permalink)  
Старый 21.11.2014, 14:42
Кандидат Javascript-наук
Отправить личное сообщение для iNfantry Посмотреть профиль Найти все сообщения от iNfantry
 
Регистрация: 29.10.2011
Сообщений: 132

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 раз! Поясните, если я что-то в группировке не понимаю.
Ответить с цитированием