@ImVeryStupid

Как вывести и группы и аргументы агрегирующей функции и её результат без повторного обращения к таблице?

Есть table:

|qt|gr|
|--|--|
| 1| 1|
| 0| 1|
| 2| 2|
| 1| 2|
| 2| 2|
| 2| 3|
| 2| 3|
| 0| 4|
| 2| 4|


Можно ли сделать
SELECT qt,gr,min(qt) AS min FROM table GROUP BY grно без свёртывания списка, что бы в результате получить:

|qt|gr|min|
|--|--|---|
| 1| 1|  0|
| 0| 1|  0|
| 2| 2|  1|
| 1| 2|  1|
| 2| 2|  1|
| 2| 3|  2|
| 2| 3|  2|
| 0| 4|  0|
| 2| 4|  0|


И без повторного обращения к table, потому что table - это результат многовложенного подзапроса, который не хотелось бы повторять.
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В MySQL 8.0 можно. Смотрите оконные функции.
Ответ написан
Комментировать
@Vitsliputsli
Для MySQL 5.7 можно через сортировку, таким образом:
SELECT 
    qt,
    CASE WHEN @group!=gr THEN @qt_min:=qt ELSE @qt_min END min,
    CASE WHEN @group!=gr THEN @group:=gr ELSE @group END gr
  FROM qw, (select @group:=0) t
  ORDER BY gr,qt

Но, конечно, лучше так не делать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы