1

DB 列:人员、政治观点、地区

数据库示例:

person1  liberal      Lviv
person2  communistic  Donetsk
person3  liberal      Lviv
person4  conservative Kyiv
person5  conservative Odesa
person6  conservative Lviv
person7  communistic  Kyiv

预期列:地区,地区公民的不同政治观点的数量,该地区的自由派人数,该地区的保守派人数。预期结果:

Lviv    2  2  1
Kyiv    2  0  1
Donetsk 1  0  0
Odesa   1  0  1

显然它看起来像这样:

SELECT region, ?????? FROM table GROUP BY region

我可以使用一些选择,但没有简单的方法吗?像 DISTINCT(politicalViews) 或 COUNT(politicalViews,'liberal')

4

2 回答 2

2

您可以在一个查询中完成这一切,使用聚合和GROUP BY

select region,
  COUNT(DISTINCT pol_view) DiffView,
  sum(CASE WHEN pol_view = 'liberal' THEN 1 ELSE 0 END) NumberLiberals,
  sum(CASE WHEN pol_view = 'conservative' THEN 1 ELSE 0 END) NumberConservatives
from test
group by region

请参阅带有演示的 SQL Fiddle

于 2012-08-22T21:26:29.323 回答
2
SELECT region, count(distinct politicalViews),
 sum(politicalViews='liberal'), sum(politicalViews='conservative')
FROM table GROUP BY region;

你为什么不想知道有多少共产党员?

于 2012-08-22T21:23:04.230 回答