查询:按字母顺序计算明智的名称

时间:2012-05-05 09:09:23

标签: mysql

我有一个包含大量数据的voter表。喜欢

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

我需要按字母顺序显示所有voter_name并计算它们。就像

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

我尝试使用count(voter_name)GROUP BY 但两个都不适合我.....假设表包含50个选民的详细信息 人名的编号以A=15,b=2, c=10,y=3开头,依此类推 那么如何统计和显示'A'人的前15个记录,接下来的2个'B'人的记录等等。
给我任何参考或提示..
提前致谢。

4 个答案:

答案 0 :(得分:4)

就这么简单,

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

答案 1 :(得分:3)

此订单仅命名:

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

这会对第一个字母的每次出现进行计数,并将它们分组在一起 例:

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

你走了!

答案 2 :(得分:1)

如果您需要按升序排列名称及其计数,则可以使用:

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

这将给出类似

的输出
name    name_count
------------------
albert          15
baby             6
...

如果您需要显示所有记录及其计数,那么您可以使用:

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

然后输出为:

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 
...          

答案 3 :(得分:1)

在这里检查MySQL的SUBSTRING功能

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

我们可以使用子查询来实现我们的结果。

所以使用它,这个怎么样

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