В каждой строке вашего запроса есть столбец c.country
из объединенной таблицы customer
. Таким образом, для каждой строки вашего запроса этот запрос:
SELECT count(*)
FROM customer
where country = c.country
выполняется и возвращает количество строк в таблице customer
, где столбец country
равен значению c.country
. Это число сравнивается с 1
, а выражение CASE
возвращает либо 'Other'
, либо значение c.country
. Вот как я мог бы написать этот код:
WITH country_or_other AS
(
SELECT
CASE
WHEN t.counter = 1 THEN "Other"
ELSE c.country
END AS country,
c.customer_id,
il.*
FROM invoice_line il
INNER JOIN invoice i ON i.invoice_id = il.invoice_id
INNER JOIN customer c ON c.customer_id = i.customer_id
INNER JOIN (SELECT country, count(*) counter FROM customer GROUP BY country) t ON t.country = c.country
)
Я предполагаю, что столбец country
в таблице customer
не NULL
.