我想从表的两列中获得这些列中值的统一计数。例如,两列是:
表:报告
| type | place | ----------------------------------------- | one | home | | two | school | | three | work | | four | cafe | | five | friends | | six | mall | | one | work | | one | work | | three | work | | two | cafe | | five | cafe | | one | home |
如果我这样做:SELECT类型,则按类型分组报告中的count(*)
我得到:
| type | count | ----------------------------- | one | 4 | | two | 2 | | three | 2 | | four | 1 | | five | 2 | | six | 1 |
我试图得到这样的东西:(我的类型最右边的列组合在一起,每个地方的计数值都包含多个列)我得到:
| type | home | school | work | cafe | friends | mall | ----------------------------------------------------------------------------------------- | one | 2 | | 2 | | | | | two | | 1 | | 1 | | | | three | | | 2 | | | | | four | | | | 1 | | | | five | | | | 1 | 1 | | | six | | | | | | 1 |
这是对每个地方进行上述计数的结果,如下所示:
SELECT type, count(*) from reports where place = 'home' group by type SELECT type, count(*) from reports where place = 'school' group by type SELECT type, count(*) from reports where place = 'work' group by type SELECT type, count(*) from reports where place = 'cafe' group by type SELECT type, count(*) from reports where place = 'friends' group by type SELECT type, count(*) from reports where place = 'mall' group by type
postgresql有可能吗?
提前致谢。
您可以case在这种情况下使用-
case
SELECT type, sum(case when place = 'home' then 1 else 0 end) as Home, sum(case when place = 'school' then 1 else 0 end) as school, sum(case when place = 'work' then 1 else 0 end) as work, sum(case when place = 'cafe' then 1 else 0 end) as cafe, sum(case when place = 'friends' then 1 else 0 end) as friends, sum(case when place = 'mall' then 1 else 0 end) as mall from reports group by type
它应该解决你的问题
@ST Mohammed,要获得这种类型,我们可以在外部查询中简单地使用usingaftergroup或wherecondition,如下所示:
using
group
where
select type, Home, school, work, cafe, friends, mall from ( SELECT type, sum(case when place = 'home' then 1 else 0 end) as Home, sum(case when place = 'school' then 1 else 0 end) as school, sum(case when place = 'work' then 1 else 0 end) as work, sum(case when place = 'cafe' then 1 else 0 end) as cafe, sum(case when place = 'friends' then 1 else 0 end) as friends, sum(case when place = 'mall' then 1 else 0 end) as mall from reports group by type ) where home >0 and School >0 and Work >0 and cafe>0 and friends>0 and mall>0