2012-08-22 4 views
1

colonnes DB: personne, politicalViews, régionCount différentes valeurs

exemple DB:

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

colonnes attendues: région, nombre de différentes opinions politiques des citoyens de la région, le nombre de libéraux dans cette région, le nombre des gens conservateurs dans cette région. Résultat attendu:

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

Évidemment, il ressemblera à quelque chose comme ceci:

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

je pourrais utiliser quelques sélections, mais isnt-il un moyen simple? Quelque chose comme DISTINCTS (politicalViews) ou COUNT (politicalViews, « libéral »)

Répondre

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

Pourquoi ne voulez-vous pas savoir combien de communistes sont là?

+0

Works, je vous remercie homme. – Alena

+0

De rien. –

2

Vous pouvez faire tout cela dans une requête, en utilisant des agrégats et un 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 

Voir SQL Fiddle with Demo

+0

Oui, merci aussi. J'ai accepté la réponse de Michael parce qu'il était le premier, mais j'ai voté pour votre réponse :) – Alena

Questions connexes