2

我有一张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)or GROUP BY
但两者都不适合我.....假设表包含 50 个选民的详细信息。
以人名开头的人数A=15,b=2, c=10,y=3等等。
然后如何计算和显示'A'人的前15条记录,'B'人的下2条记录等等..
给我任何参考或提示..
提前致谢。

4

4 回答 4

4

就这么简单,

SELECT SUBSTRING(name,1,1) as ALPHABET, COUNT(name) as COUNT 
FROM voter GROUP BY SUBSTRING(name,1,1);
于 2015-07-07T08:23:01.620 回答
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

干得好!

于 2012-05-05T09:11:04.580 回答
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 
...          
于 2012-05-05T09:34:23.030 回答
1

在这里查看SUBSTRINGMySQL 的功能

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
于 2012-05-05T09:55:44.890 回答