SQL Select 占总数的百分比(基于位置)
SQL Select percentage from total based on location
我想解决以下问题:
为每种运动类型给出区域 10 中的事件占该运动类型的事件总数的百分比。
我有两个表:
events:列出所有体育赛事。 “sport_type”列定义了赛事的运动类型;它有一个点几何。
zones:列出所有名称为 ex 的区域。 'region 10'。它们具有多边形几何形状。
列出我拥有的每种运动类型的项目数量:
select e.sport_type as Sport_Type, count(e.sport_type) as Number_of_Events
from events e
group by e.sport_type
要列出区域 10 中每种运动类型的事件数,我有:
select e.sport_type as Sport_Type, count(e.sport_type) as Number_of_Events
from events e
inner join zones z
on st_contains(z.geom, e.geom)
where z.name = 'region 10'
group by e.sport_type
为了解决这个问题,我尝试了类似的方法但没有成功:
select e1.sport_type as Sport_Type, (x.Numev / count(e1.sport_type)) as Number_of_Events
from events e1, (select e2.sport_type as evtype, count(e2.sport_type) as Numev
from programs e2
inner join zones z
on st_contains(z.geom, e2.geom)
where z.name = 'region 10'
group by e2.sport_type) x
group by e1.sport_type, x.Numev
使用两个子选择创建一个非常不言自明的查询:
SELECT sport_type, 100. * r10.total / sports.total AS r10_percent
FROM (
SELECT sport_type, count(sport_type) AS total
FROM events
GROUP BY sport_type) sports
JOIN (
SELECT sport_type, count(sport_type) AS total
FROM events
JOIN zones ON ST_Contains(zones.geom, events.geom)
WHERE zones.name = 'region 10'
GROUP BY events.sport_type) r10 USING (sport_type);
还没有测试,试试吧,因为你有很多事件,你可以很容易地计算出百分比(例如:外面还有 1 个 select)
select
e.sport_type as Sport_Type,
count(*) as totalEvents,
sum(CASE
WHEN z.name = 'region 10' THEN 1
ELSE 0
END
) as totalEventsInRegion10
from events e
left join zones z on st_contains(z.geom, e.geom)
group by e.sport_type
我想解决以下问题:
为每种运动类型给出区域 10 中的事件占该运动类型的事件总数的百分比。
我有两个表:
events:列出所有体育赛事。 “sport_type”列定义了赛事的运动类型;它有一个点几何。
zones:列出所有名称为 ex 的区域。 'region 10'。它们具有多边形几何形状。
列出我拥有的每种运动类型的项目数量:
select e.sport_type as Sport_Type, count(e.sport_type) as Number_of_Events
from events e
group by e.sport_type
要列出区域 10 中每种运动类型的事件数,我有:
select e.sport_type as Sport_Type, count(e.sport_type) as Number_of_Events
from events e
inner join zones z
on st_contains(z.geom, e.geom)
where z.name = 'region 10'
group by e.sport_type
为了解决这个问题,我尝试了类似的方法但没有成功:
select e1.sport_type as Sport_Type, (x.Numev / count(e1.sport_type)) as Number_of_Events
from events e1, (select e2.sport_type as evtype, count(e2.sport_type) as Numev
from programs e2
inner join zones z
on st_contains(z.geom, e2.geom)
where z.name = 'region 10'
group by e2.sport_type) x
group by e1.sport_type, x.Numev
使用两个子选择创建一个非常不言自明的查询:
SELECT sport_type, 100. * r10.total / sports.total AS r10_percent
FROM (
SELECT sport_type, count(sport_type) AS total
FROM events
GROUP BY sport_type) sports
JOIN (
SELECT sport_type, count(sport_type) AS total
FROM events
JOIN zones ON ST_Contains(zones.geom, events.geom)
WHERE zones.name = 'region 10'
GROUP BY events.sport_type) r10 USING (sport_type);
还没有测试,试试吧,因为你有很多事件,你可以很容易地计算出百分比(例如:外面还有 1 个 select)
select
e.sport_type as Sport_Type,
count(*) as totalEvents,
sum(CASE
WHEN z.name = 'region 10' THEN 1
ELSE 0
END
) as totalEventsInRegion10
from events e
left join zones z on st_contains(z.geom, e.geom)
group by e.sport_type