使用case语句

时间:2016-08-02 20:44:09

标签: google-bigquery

执行时查询下面给出了如下结果 (选择
案例
           当prodName包含('AAA')那么'AAA'时           当prodName包含('BBB')那么'BBB'时   当prodName包含('CCC')那么'CCC'           当prodName包含('DDD')那么'DDD'   当prodName包含('EEE')那么'EEE'           当prodName包含('FFF')那么'FFF'时   当prodName包含('GGG')那么'GGG'时           当prodName包含('HHH')那么'HHH'            ELSE'其他'        结束为
PROD_NAME,
 EXACT_COUNT_DISTINCT(用户)AS Distinct_users
来自[mytable]
GROUP BY 1
订购2 DESC
IGNORE CASE)

enter image description here


下面的查询与上面相同,但我已经给出了一个子选择,以便在PROD_NAME = aaa返回不同的结果时省略记录,其中它将值为1的不同用户聚合到其他用户并显示差异结果。

SELECT PROD_NAME,EXACT_COUNT_DISTINCT(用户)AS Distinct_users
来自 (选择
案例
           当prodName包含('AAA')那么'AAA'时           当prodName包含('BBB')那么'BBB'时   当prodName包含('CCC')那么'CCC'           当prodName包含('DDD')那么'DDD'   当prodName包含('EEE')那么'EEE'           当prodName包含('FFF')那么'FFF'时   当prodName包含('GGG')那么'GGG'时           当prodName包含('HHH')那么'HHH'            ELSE'其他'        结束为
PROD_NAME,
 EXACT_COUNT_DISTINCT(用户)AS Distinct_users
来自[mytable]
GROUP BY 1
订购2 DESC
IGNORE CASE)

enter image description here

请告诉我如何解决此问题。我需要第二个查询提供与第一个相同的输出,但我不需要PROD_NAME ='AAA'。我已经包含了作为案例陈述,因为我的表包含几个数据,如'aaa','AAA','aaa-in','Aaa'等,我将所有内容组合在一起以显示总值

1 个答案:

答案 0 :(得分:1)

  

我需要第二个查询提供与第一个相同的输出,但我不需要PROD_NAME =' AAA'

如何简单地添加HAVING子句如下

SELECT 
  CASE 
    WHEN prodName CONTAINS('AAA') THEN 'AAA' 
    WHEN prodName CONTAINS('BBB') THEN 'BBB' 
    WHEN prodName CONTAINS('CCC') THEN 'CCC' 
    WHEN prodName CONTAINS('DDD') THEN 'DDD' 
    WHEN prodName CONTAINS('EEE') THEN 'EEE' 
    WHEN prodName CONTAINS('FFF') THEN 'FFF' 
    WHEN prodName CONTAINS('GGG') THEN 'GGG' 
    WHEN prodName CONTAINS('HHH') THEN 'HHH' 
    ELSE 'Others' 
  END AS 
  PROD_NAME, 
EXACT_COUNT_DISTINCT(user) AS Distinct_users 
FROM [mytable] 
GROUP BY 1 
HAVING PROD_NAME <> 'AAA'
ORDER BY 2 DESC 
IGNORE CASE