27cm
@27cm
TODO: Написать статус

Как создать представление с группировкой соседних строк?

Всем доброго.

Появилась необходимость группировать соседние строки с одинаковыми значениями определённых полей.

Для простоты, из вот такой таблицы (слева) нужно получить вот такую (справа):
| id | num |          | num | count |
|----|-----|          |-----|-------|
|  1 |   1 |          |   1 |     2 |
|  2 |   1 |          |   2 |     1 |
|  3 |   2 |          |   1 |     3 |
|  4 |   1 |          |   3 |     2 |
|  5 |   1 |          |   4 |     1 |
|  6 |   1 |          
|  7 |   3 |          
|  8 |   3 |          
|  9 |   4 |


Сказано, подумано, погуглено — сделано: sqlfiddle.com/#!9/c9c30b/1/0.

SELECT `num`, COUNT(`group`) AS `count` 
FROM(
    SELECT 
        `id`, `num`,
        IF (@prev = `num`, @group, @group := @group + 1) AS `group`,
        @prev := `num` AS `prev`
    FROM `test`
    JOIN (SELECT @prev := 0, @group := 0) AS `t1`
) AS `t2`
GROUP BY `group`;


Но вот теперь есть необходимость засунуть этот запрос в представление (VIEW), и тут возникает две проблемы:
1. В представлениях нельзя использовать подзапросы внутри FROM. Это можно обойти, создав дополнительное представление для подзапроса.
2. В представлениях нельзя использовать переменные. И вот это уже проблема. Додуматься до решения этой задачи, не используя переменные мне не удалось. Поэтому и обращаюсь к сообществу, буду благодарен за любую помощь.

Отказываться от представления очень не хотелось бы, так как реальный запрос очень большой (с кучей JOIN, UNION и проч). И работать с его результатом из кода нужно как с одной таблицей, т. е. иметь возможность дополнительно сортировать, фильтровать, группировать, лимитить и т. п.
  • Вопрос задан
  • 398 просмотров
Пригласить эксперта
Ответы на вопрос 1
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Процедура? :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы