带有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中的子选择的主要内容,如果未能解决你的问题,请参考以下文章
带有 case OR-ing 的 VB.NET 选择 case 语句逻辑是啥?