带有case语句的bigquery中的子选择

Posted

技术标签:

【中文标题】带有case语句的bigquery中的子选择【英文标题】:Sub select in bigquery with case statement 【发布时间】:2016-08-02 20:44:08 【问题描述】:

当我执行时,下面的查询给了我如下结果 (选择 案例 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 '其他' 结束为 产品名称, EXACT_COUNT_DISTINCT(user) AS Distinct_users FROM [mytable] 按 1 分组 按 2 DESC 排序 忽略大小写)

下面的查询与上面的相同,但我给出了一个子选择,以便在 PROD_NAME = aaa 返回不同的结果时省略记录,其中它将具有值 1 的不同用户聚合给其他用户并显示差异结果。 SELECT PROD_NAME, EXACT_COUNT_DISTINCT(users) AS Distinct_users 来自 (选择 案例 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 '其他' 结束为 产品名称, EXACT_COUNT_DISTINCT(user) AS Distinct_users FROM [mytable] 按 1 分组 按 2 DESC 排序 忽略大小写)

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于带有case语句的bigquery中的子选择的主要内容,如果未能解决你的问题,请参考以下文章

使用 Oracle 子选择替换 CASE 语句

带有 case OR-ing 的 VB.NET 选择 case 语句逻辑是啥?

如何克服 Hive for CASE 语句中的子查询

为啥在 Oracle 中使用 CASE 进行子选择比 JOIN WITH OR 更快

无法构建有效的 BigQuery CASE 语句

Oracle SQL - 带有迭代的 Case 语句