0

这是我的数据的样子

title  value 
------------
 t1      v1
 t2      v2
 t3      v3

现在我想t1t2被推断为相同的值t12。所以,我这样做:

SELECT 
    CASE
       WHEN title = 't1' OR title = 't2' 
          THEN 't12'
          ELSE title 
    END AS inferred_title,
    COUNT(value)
FROM 
    my_table
GROUP BY 
    inferred_title;

我预计输出是:

inferred title  values
-----------------------
   t12            2
   t3             1

但我最终得到的是:

inferred title     values
--------------------------
   t12                1
   t12                1
   t3                 1

如何让它按照我想要的方式运行?我不想要重复的行。

4

3 回答 3

3

问题是范围界定。你必须有一个inferred_title在表中。要么给一个新的列别名,要么重复表达式:

SELECT (CASE WHEN title IN ('t1', 't2') THEN 't12'
             ELSE title
        END) AS inferred_title,
       COUNT(value)
FROM my_table
GROUP BY (CASE WHEN title IN ('t1', 't2') THEN 't12'
               ELSE title
          END);
于 2019-12-04T19:05:34.480 回答
1

case在派生表(子查询)中进行“合并” ,group by其结果:

SELECT inferred_title, COUNT(value)
FROM
(
    SELECT CASE WHEN title = 't1' OR title = 't2' THEN 't12'
                ELSE title 
           END AS inferred_title,
           value
    FROM my_table
) dt
GROUP BY inferred_title;

这为您节省了一些输入,不易出错且更易于维护 - 并且符合 ANSI SQL!

于 2019-12-04T20:39:35.923 回答
0
Select Title, COUNT(Title) AS Totals
From my_table          
Group By Title
Having COUNT(Title)>1
Order By 2 desc
于 2021-12-27T09:19:05.590 回答