如何使用CASE语句合并行

时间:2019-10-19 05:16:38

标签: sqlite

我有一个数据库,其中有58位客户(58行)和一列(国家/地区)。如何对一个国家仅出现一次的所有行进行分组,并使用intent.bar = <Ask Each Time>语句将其名称更改为“其他”

CASE

问题是,当我运行查询时,所有国家/地区都变成“其他”。我只希望曾经出现过的国家称为“其他”。

3 个答案:

答案 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);