我有一个数据库,其中有58位客户(58行)和一列(国家/地区)。如何对一个国家仅出现一次的所有行进行分组,并使用intent.bar = <Ask Each Time>
语句将其名称更改为“其他”
CASE
问题是,当我运行查询时,所有国家/地区都变成“其他”。我只希望曾经出现过的国家称为“其他”。
答案 0 :(得分:1)
这是操作方法。
SELECT
CASE WHEN COUNT(country) = 1 THEN 'Other' ELSE country END
FROM customer
GROUP BY country;
答案 1 :(得分:0)
使用子查询来计算一个国家/地区在表格中出现的次数:
SELECT
CASE
WHEN (SELECT COUNT(*) FROM customer WHERE country = c.country) = 1 THEN 'Other'
ELSE c.country
END country
FROM customer c
或者通过表与子查询的联接返回所有国家/地区的所有计数器:
SELECT
CASE
WHEN g.counter = 1 THEN 'Other'
ELSE c.country
END country
FROM customer c INNER JOIN (
SELECT country, COUNT(*) counter
FROM customer
GROUP BY country
) g ON g.country = c.country
如果要根据此CASE语句的结果对表进行分组,请使用别名来区分表的列country
:
SELECT
CASE
WHEN (SELECT COUNT(*) FROM customer WHERE country = c.country) = 1 THEN 'Other'
ELSE c.country
END _country
FROM customer c
GROUP BY _country
答案 2 :(得分:0)
要更新实际表:
WITH map AS
(SELECT country,
CASE WHEN COUNT(country) = 1 THEN 'Other'
ELSE country END mapped
FROM customer
GROUP BY country)
UPDATE customer
SET country = (SELECT mapped FROM map WHERE map.country = customer.country);