Добрый вечер.
Пусть есть таблица просмотров поста юзерами на определённом статусе. Задача получить количество просмотров поста по статусам. при этом для всех статусов при просмотре в лог пишется 0 или 1 и их считаем простым sum, а для учета веса юзеров смотревших пост (1 - 40) в таблицу просто пишется сам вес (1-40) и нужно в агрегированной записи выборки получить сгрупированные значения просмотров: "вес (кол-во)" по каждому имеющемуся для поста весу
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| post_id | int(11) | YES | | NULL | |
| current_week | int(2) | YES | | NULL | |
| status1 | int(1) | YES | | NULL | |
| status2 | int(1) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
Записи в логе выглядят примерно так:
123 | 0 | 1 | 15
100 | 1 | 1 | 20
101 | 0 | 0 | 20
101 | 0 | 0 | 0
Задача получить одним запросом сгруппрованные данные формата:
post_id | sum(ststus1) | sum(status2) | 15(4), 10(2), 40(6)
Запрос:
CODE ( SQL):
скопировать код в буфер обмена
SELECT post_id, SUM(status1), SUM(status2), GROUP_CONCAT(weight, '(0)' SEPARATOR ', ') FROM tblname GROUP BY post_id;
даёт выборку:
'210', '5', '0', '15(0), 0(0), 20(0), 1(0), 15(0), 20(0)'
Соответственно вместо '(0)' и дублирующихся значений веса хотелось бы получить их количество максимально лаконичным способом.
Кроме этажных подзапросов ничего не приходит в голову.
|