2012-05-05 3 views
2

J'ai une table voter qui contient une grande quantité de données. CommeQuery: Count Nom alphabétique

Voter_id name  age 
1   san  24 
2   dnyani 20 
3   pavan  23 
4   ddanial 19 
5   sam  20 
6   pickso 38 

Je dois montrer tous voter_name par ordre alphabétique et compter them.Like

name   
san 
sam 
s... 
s...  
dnyani 
ddanial 
d...  
pavan    
pickso 
p.. 
p..  

j'essayer d'utiliser count(voter_name) ou GROUP BY.
Mais les deux ne fonctionnent pas pour moi ... Supposons que la table contient 50 détails d'électeurs. Numéro de nom de personne commence par A=15,b=2, c=10,y=3 et ainsi de suite.
Ensuite, comment compter et montrer le premier 15 enregistrement de «A» personne, 2 enregistrements suivants de «B» personne et ainsi de suite ..
Donnez-moi toute référence ou indice ..
Merci à l'avance.

Répondre

3

Ce nom de commande seulement:

SELECT `name` FROM `voter` ORDER BY `name` ASC 

Ce qui compte chaque occurrence de la première lettre et les groupe de les regrouper
ex .:

Letter COUNT 
------ ------- 
    A  15 
    B  2 
    C  10 
    y  3 

SELECT SUBSTR(`name`,1,1) GRP, COUNT(`name`) FROM `voter` WHERE 
SUBSTR(`name`,1,1)=SUBSTR(`name`,1,1) GROUP BY GRP ORDER BY GRP ASC 

Ici vous allez!

+0

mais comment compter et montrer ASC –

+0

@sandiparmal vérifier le montage il devrait fonctionner pour vous. –

1

Si vous avez besoin des noms et leurs comptes dans l'ordre croissant, vous pouvez utiliser:

SELECT 
    name, COUNT(*) AS name_count 
FROM 
    voter 
GROUP BY 
    name 
ORDER BY 
    name ASC 

Ce qui vous donnera la sortie comme

name name_count 
------------------ 
albert   15 
baby    6 
... 

Si vous devez afficher tous les documents ainsi que leur compte, alors vous pouvez utiliser ceci:

SELECT 
    voter_id, name, age, name_count 
FROM 
    (
     SELECT 
      name, COUNT(name) AS name_count 
     FROM 
      voter 
     GROUP BY 
      name 
    ) counts 
    JOIN actor 
    USING (name) 
ORDER BY 
    name 

et vous obtenez la sortie comme:

voter_id name  age name_count 
------------------------------------ 
     6 abraham 26   2 
     24 abraham 36   2 
     2 albert 19   1 
     4 babu  24   4 
     15 babu  53   4 
     99 babu  28   4 
     76 babu  43   4 
...   
+1

Il veut compter tous les mots commence par A, B, ... et regroupe les comptes par la lettre, l'a déjà fait, vérifie ma solution. –

1

Vérifiez la fonction SUBSTRING de MySQL ici

http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_substring 

Et nous pouvons utiliser une sous-requête pour obtenir notre résultat.

Donc, en utilisant que diriez-vous de cette

SELECT voter_id, name, age, COUNT(*) AS alphabet 
FROM 
    (SELECT voter_id, name, age, SUBSTRING(name, 1, 1) AS first_letter FROM voter) 
AS voter 
GROUP BY first_letter 
ORDER BY first_letter ASC 
4

Il est aussi simple que cela,

SELECT SUBSTRING(name,1,1) as ALPHABET, COUNT(name) as COUNT 
FROM voter GROUP BY SUBSTRING(name,1,1);