我想根据组中第一个(实际上是唯一的)值在group by
表中设置一个列。
具体来说,给出一个表
id good
1 t
1 t
2 f
3 t
我想制作表格
id multiplicity goodN
1 2 0
2 1 0
3 1 1
当且仅当goodN
为1且multiplicity
为good
时,t
为1:
select id, count(*) as multiplicity,
if (count(*) > 1, 0, if(good = 't', 1, 0)) as goodN
from ...
问题是:如何从组中提取good
的第一个(仅在我的情况下)值?
PS。是否有更便宜的方法来测试该组的大小为1而不是count(*)=1
?
答案 0 :(得分:1)
如果计数为1,那么MAX(好)和MIN(好)都将成为该组中的“第一”行。
select id, count(*) as multiplicity,
if (count(*) > 1, 0, if(max(good) = 't', 1, 0)) as goodN
from ...
答案 1 :(得分:0)
从...中选择好 其中id =(从...中选择min(id)) 好的> 0)
和
按ID分组(id)= 1
您可以测试计数(货物)而不是计数(*),最后按ID添加组。仅使用moltiplicity 1记录添加有计数(商品)= 1
答案 2 :(得分:0)
如果是MySQL那么简单地说:
SELECT id,
good,
count(*) AS multiplicity,
if((count(*) > 1 AND good = 't'), @flag := 1, @flag := 0) AS goodN
FROM goods
GROUP BY good, id;
PS:如果您要我删除我的答案,请告诉我。
答案 3 :(得分:0)
我没有使用hiveql的经验,但这可以在mySql中实现你想要的。我认为应该在hiveql中使用相同的功能。
select t.id, count(*) as multiplicity,
(select case count(*) when 1 then 1 else 0 end
from table1
where id = t.id
and good = 't') as goodN
from table1 t
group by t.id
<强> sqlFiddle 强>