Есть интересный запрос, который не даёт мне покоя уже неделю:
Код: Выделить всё
SELECT
cg.group_id ,
cg .group_name ,
crg.cam_id ,
crg.rule_status,
SUM(IF(crg.rule_status = 0, cnt, 0)) as res_dlw,
SUM(IF(crg.rule_status = 1, cnt, 0)) as res_alw,
SUM(IF(crg.rule_status = 2, cnt, 0)) as res_ono
FROM cams_rules_groups
RIGHT OUTER JOIN
cams_groups as cg
ON crg.group_id = cg.group_id
LEFT OUTER JOIN (
SELECT
crg.group_id ,
crg.rule_status,
COUNT(*) as cnt
FROM
cams_rules_groups as crg
GROUP BY crg.group_id , crg.rule_status
) as crg ON crgg.group_id = crg.group_id
GROUP BY cg.group_id
group_id - ID группы , group_name - Имя группы / group_id - ID группы (дублируется из таблицы cams_groups ), cam_id - цыфры (могут быть повторяющимися), rule_status - цыфры (значения только 0, 1, 2 или res_dlw, res_alw, res_ono соответственно).
В результате запрос выдаёт в JQuery таблицу типа group_id, group_name, rule_status
Где group_id и group_name - соответствуют оригиналу, а rule_status выдаёт res_dlw/res_alw/res_ono (число/число/число)
Число - это сумма значений из rule_status соответствующих res_dlw, res_alw, res_ono.
То есть если у одного group_id (например 5) с разными cam_id (например 2 и 15) одинаковые значение столбца rule_status res_dlw (это 0), то должно вывестись 2/0/0, а выводится 4/0/0.
Или например 2/1/0, а выводится 6/3/0.
Получается, что при подсчёте запрос помимо желаемого складывания ещё и умножает каждое значение на общую сумму res_dlw + res_alw + res_ono, то есть 2*3/1*3/0*3
Так что MySQL не перестаёт удивлять (или это просто создатель запроса где-то сильно затупил). Если кто сможет помочь, буду чрезвычайно благодарен!