2014-04-29 2 views
0

J'ai différents types de mobiles dans une table. Des types comme iPhone, Android, Windows, etc. Je veux obtenir les comptes individuels de chaque type en utilisant la même requête. J'ai utilisé la requête ci-dessous pour obtenir le nombre d'un type.Comment obtenir des comptes individuels de la même table, en fonction de différents mots-clés

`select type, 
    count(1) AS total 
    from mobile_types where type = 'iPhone' 
    group by type;' 

J'ai obtenu l'O/P requis en utilisant ceci pour un enregistrement.

iPhone 1000

Mais quand je l'essaye pour plusieurs enregistrements je reçois une erreur. J'ai utilisé ce qui suit pour plusieurs enregistrements.

'select type, 
    count(1) AS total 
    from mobile_types where type = 'iPhone' 
    from mobile_types where type = 'windows' 
    group by type;' 

l'erreur je suis arrivé était « ligne ParseException 5: 0 manquant EOF à « de » près de « » iPhone « » »

Et est-il un moyen pour obtenir la sortie en dessous le format, avec des types en tant que noms de colonne et le compte ci-dessous en tant que ligne?

| iPhone | windows | android |

1000 | 1500 | 900 |

MISE À JOUR

j'ai pu obtenir les comptes individuels en utilisant le script ci-dessous.

'select type, 
    count(1) AS total 
    from mobile_types where type = 'iPhone' OR type = 'android' OR type = 'windows' 
    group by type;' 

Mais vous avez toujours besoin du format o/p mentionné ci-dessus. Format actuel o/p

iphone 1000

windows android 900

1500.

Toutes les suggestions?

Répondre

0

Pour obtenir le format de sortie que vous recherchez:

select 
sum(if(type = 'iphone', 1, 0)) as n_iphone, 
sum(if(type = 'android', 1, 0)) as n_android, 
sum(if(type = 'windows', 1, 0)) as n_windows 
from mobile_types; 
+0

Cela a fonctionné, mais il suffit d'afficher les valeurs de sortie sans le nom de la colonne comme 1000 1500 900 – dheee

+0

faire "set hive.cli.print.header = true;" et puis relancer –

+0

Merci beaucoup , ça a marché :) – dheee

0

Vous n'avez pas besoin de la clause where pour obtenir le type. Ceci montrera une liste de tous les types avec le compte de chacun dans la colonne totale.

select type, 
count(*) AS total 
from mobile_types 
group by type; 

APRÈS UN COMMENTAIRE

SELECT type, 
COUNT(*) AS total 
FROM mobile_types 
WHERE type IN ('IPhone','Android', 'Other Phone Names') 
GROUP BY type; 
+0

Ce fut ma première pensée. Mais la chose est que je n'ai besoin que de quelques types dans ma sortie. – dheee

+0

J'ai édité la réponse pour refléter ce que vous aimeriez voir. – Elias

+0

Merci cela fonctionne. Existe-t-il un moyen d'afficher la sortie comme le type de téléphone comme nom de colonne et le nombre de chaque type de téléphone sous le nom de la colonne? – dheee

Questions connexes