我正在创建一个查询,计算表格中男性和女性演员的数量.我目前的陈述是这样的:
Select COUNT(ActorGender) “Male Actors”
from (tblActor ta WHERE ta.ActorGender in(‘m’)
UNION
Select COUNT(ActorGender) “Female Actors”
from tblActor ta
WHERE ta.ActorGender in(‘f’);
Run Code Online (Sandbox Code Playgroud)
输出最终是:
Male Actors
-----------
7
21
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来像:
Male Actors Female Actors
----------- -------------
7 21
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种替代方案,而不使用CASE WHEN或THEN条款.
提前感谢您的帮助.
这样做:
SELECT COUNT(CASE WHEN ActorGender = 'm' THEN 1 ELSE NULL END) MaleActors,
COUNT(CASE WHEN ActorGender = 'f' THEN 1 ELSE NULL END) FemaleActors
FROM tblActor
WHERE ActorGender IN ('m','f')
Run Code Online (Sandbox Code Playgroud)
另一种方式(没有CASE表达):
SELECT
( SELECT COUNT(*)
FROM tblActor
WHERE ActorGender = 'm'
) AS MaleActors
, ( SELECT COUNT(*)
FROM tblActor
WHERE ActorGender = 'f'
) AS FemaleActors
FROM
dual ;
Run Code Online (Sandbox Code Playgroud)
和更多的CROSS加入解决方案:
SELECT m.MaleActors, f.FemaleActors
FROM
( SELECT COUNT(*) AS MaleActors
FROM tblActor
WHERE ActorGender = 'm'
) m
CROSS JOIN
( SELECT COUNT(*) AS FemaleActors
FROM tblActor
WHERE ActorGender = 'f'
) f ;
Run Code Online (Sandbox Code Playgroud)
不使用案例的另一种方式:
select sum(males) as "Male Actors", sum(females) as "Female Actors"
from
(select count(actorGender) as Males, 0 as Females
from tblActor
where actorGender = 'm'
union all
select 0 as males, count(actorGender) as Females
from tblActor
where actorGender = 'f')
Run Code Online (Sandbox Code Playgroud)
应该导致
Male Actors Female Actors
----------- -------------
7 21
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Oracle 11g +,那么您可以使用PIVOT:
select *
from
(
select actorgender
from tblActor
) src
pivot
(
count(actorgender)
for actorgender in ('m' MaleActors, 'f' FemaleActors)
) piv
Run Code Online (Sandbox Code Playgroud)
结果将是:
| MALEACTORS | FEMALEACTORS |
-----------------------------
| 4 | 5 |
Run Code Online (Sandbox Code Playgroud)
或者您可以使用a CROSS JOIN来获得相同的结果:
select m.MaleActors, f.FemaleActors
from
(
select count(ActorGender) MaleActors, 'm' Gender
from tblActor
where ActorGender = 'm'
) m
cross join
(
select count(ActorGender) FemaleActors, 'f' Gender
from tblActor
where ActorGender = 'f'
) f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22456 次 |
| 最近记录: |