2012-08-22 54 views
1

DB列:人,politicalViews,区域计数不同的值

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')

回答

2
SELECT region, count(distinct politicalViews), 
sum(politicalViews='liberal'), sum(politicalViews='conservative') 
FROM table GROUP BY region; 

为什么你不想知道有多少共产主义者?

+0

作品,谢谢你的男人。 – Alena

+0

不客气。 –

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 with Demo

+0

是的,也谢谢你。我接受了迈克尔的回答,因为他是第一位的,但还是赞成你的回答:) – Alena