Вы должны поместить свой запрос в другой запрос для повторного агрегирования. GROUP BY
a CASE
, который возвращает страну, или 'Other'
на основе количества. ORDER BY
становится немного сложнее, так как вам придется использовать вышеупомянутый случай в нем, чтобы отсортировать Others
после всех других стран. Сначала проверьте, возвращает ли CASE
'Others'
, затем возвращает более высокое значение, иначе более низкое. Затем сортируйте по CASE
.
Это должно выглядеть примерно так:
SELECT CASE x.total_customers
WHEN 1 THEN
'Others'
ELSE
x.country
END country,
sum(total_customers) total_customers
FROM (SELECT c.country,
count(DISTINCT c.customer_id) total_customers
FROM customer c
GROUP BY c.country) x
GROUP BY CASE x.total_customers
WHEN 1 THEN
'Others'
ELSE
x.country
END
ORDER BY CASE
WHEN CASE x.total_customers
WHEN 1 THEN
'Others'
ELSE
x.country
END = 'Others' THEN
1
ELSE
-1
END,
CASE x.total_customers
WHEN 1 THEN
'Others'
ELSE
x.country
END;
(Не проверено, поскольку не были предоставлены DDL или данные образца.)