sql—在配置单元中使用groupby函数获取聚合计数,并在输入表中某个类别的数据不可用时获取零作为计数输出

flvlnr44  于 2021-06-27  发布在  Hive
关注(0)|答案(2)|浏览(255)

我有一个如下所示的输入表,正在尝试获取聚合计数:
箱子/桶是固定的。这个例子有桶/箱-1到90,97,98。这些桶/箱需要计数。

只要输入表中有可用的数据,我就可以得到所有箱子的计数。但当数据不可用时,它不会显示为零计数。
非常感谢您的帮助。提前谢谢。
示例:“97”值不出现在年份=2015中。所以它在输出表中应该有零计数。
我试过的代码:
选择'ada'作为属性,year,'98'作为bin,count(year)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative where ada=98
按年份分组联合所有选择'ada'作为属性,年份,'97'作为bin,count(year)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative其中ada=97
group by year union all选择'ada'作为属性,year,'1 to 90'作为bin,count(year)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative其中ada介于1和90之间group by year

mbjcgjjk

mbjcgjjk1#

选择'ada'作为属性,year,'98'作为bin,count(year)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative where ada=98
分组按年份联合所有选择'ada'作为属性,年份,'97'作为bin,sum(当ada=97时为1,否则为0结束)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative where ada=97
group by year union all选择'ada'作为属性,year,'1 to 90'作为bin,count(year)作为bin\u count from mrmg\u atrib\u monit\u psi\u db.ada\u data\u types\u negative其中ada介于1和90之间group by year
解决方案:在select语句的sum(case)末尾替换where函数也有助于获得零计数

avkwfej4

avkwfej42#

“预定义”我想你的意思是你有一个bin定义表。然后你可以使用 cross join 生成行和 left join 要生成数据:

  1. select y.year, b.bin, count(i.year) as cnt
  2. from (select distinct year from input) y cross join
  3. bins b left join
  4. input i
  5. on i.year = y.year and i.ada between b.lo and b.hi
  6. group by y.year, b.bin;

相关问题