SQL Oracle 19 Как объединить часть данных в группировке GROUP BY

Рейтинг: 1Ответов: 2Опубликовано: 11.02.2023

Хочу, чтоб выдало 3 строки в группировке:
Иван
Петр
Другие
Вот как объединить все другие варианты (Ольга, Юлия) в одно ?

Имя Зарплата
Иван    2000
Ольга   3000
Иван    4000
Петр    5000
Юлия    6000
Петр    7000
Иван    8000

Ответы

▲ 1Принят

Используйте CASE - WHEN в SELECT и GROUP BY:

-- MyTable(Name, Salary)

SELECT 
    CASE WHEN Name IN('Петр', 'Иван') THEN Name ELSE 'Другие' END AS Name, 
    SUM(Salary) AS TotSalary
FROM MyTable
GROUP BY (CASE WHEN Name IN('Петр', 'Иван') THEN Name ELSE 'Другие' END)

Или же во вложенном запросе (inline view):

-- MyTable(Name, Salary)

SELECT Name, SUM(Salary)
FROM (
    SELECT 
        CASE WHEN Name IN('Петр', 'Иван') THEN Name ELSE 'Другие' END AS Name, 
        Salary
        FROM MyTable
) MyView
GROUP BY Name
▲ 1
with t as (
    SELECT 
        CASE
            WHEN name IN ('Петр', 'Иван') THEN name
            ELSE 'Другие'
        END AS name, 
        salary
    FROM mytable
)
SELECT name, SUM(salary) from t GROUP BY name;