我目前有一个包含id的表,以及该id字段的条件计数。例如,我的表格如下:
ID Banana_count
1 13
2 23
3 56
原始计数来自联接和来自其他表的查询。
create FRUIT_TABLE as
select id, count (fruit)
from my_table a
where exists (select null from DATE_FED b
where a.id = b.id
and date = (2/11/17)
and fruit_type = 'banana')
group by id;
我的问题是,如何将其他属性添加到此特定表中,使其看起来像:
ID Banana_count Apple_count Orange_count
1 13 35 22
2 23 44
3 56
4 33 55
5 11
我将不得不向FRUIT_TABLE添加更多的ID,这些ID可能不在当前表中,但对于当前与id相关联的水果,我想将它们添加到同一行。
答案 0 :(得分:1)
这是merge
的经典用例:
merge into fruit_table
using apple_table
on (fruit_table.id = apple_table.id)
when matched then update set
fruit_table.apples = apple_table.apples
when not matched then insert (id,apples)
values(
apple_table.id,
apple_table.apples
);
我已经稍微简化了这个问题,所以你从一个只有id和一个苹果数的表中插入,这样合并的结构就更清晰了。但您可以将子查询插入到语句的using...
部分,以满足您的实际要求。
答案 1 :(得分:1)
我会查看以下内容[您没有提供您的表格定义,或其他应用程序或要求限制因此无法准确回答]:
create FRUIT_TABLE as
select id
, sum(case when fruit_type = 'banana' then 1 else 0 end ) Banana_count
, sum(case when fruit_type = 'apple' then 1 else 0 end ) apple_count
, sum(case when fruit_type = 'orange' then 1 else 0 end ) orange_count
from my_table a
group by id;