【发布时间】:2016-10-17 17:17:26
【问题描述】:
我正在尝试按版本类型计算每周出现在我的数据中的不同 ID,但我不确定如何正确构建查询。
我希望按照以下方式制作一个表格:
1.1 1.2 1.3 1.4
wk1 1 5 4 8
wk2 4 3 9 8
wk3 1 8 0 6
我尝试制作下面的查询,但它不会运行,因为它需要 group by 中的 Case 语句,然后它不会接受 count()。
SELECT
Case when version like "1.1%" then Count(distinct ID)
when version like "1.2%" then Count(distinct ID)
when version like "1.3%" then Count(distinct ID)
when version like "1.4%" then Count(distinct ID) end,
CAST(((datediff(timestamp_pst,'2016-01-03') / 7)+1) as INT) as week_of_the_year
FROM db.table
where timestamp_pst >= "2016-01-28"
group by CAST(((datediff(timestamp_pst,'2016-01-03') / 7)+1) as INT)
order by week_of_the_year
【问题讨论】:
-
你不想要像
SUM( CASE WHEN ... THEN 1 ELSE 0 END) x...这样的东西吗(虽然我会在应用程序代码中处理这种事情) -
@Strawberry - 即使列列表已修复,也会在应用端执行此操作?
-
@Strawberry 如果 ID 重复要建议的接缝 COUNT(DISTINCT) 将不会产生与 SUM(CASE WHEN THEN 1 ELSE 0 END) 相同的结果,后者将等效于 COUNT() 其中版本如....
标签: sql count group-by hive case