SQL语句按字母顺序排序并计数

3

这是我得到的mySQL

id   terms    
1    a       
2    c       
3    a       
4    b       
5    b       
6    a       
7    a
8    b
9    b
10   b        

我希望能够按照数量排序并以字母顺序列出以下内容。
terms  count
a      4
b      5
c      1

我需要什么mySQL语句才能做到这一点?

6
一个 group by 子句,一个 count 聚合函数,以及一个 order by 子句。 - Marc B
3个回答

6
我相信以下内容可以解决这个问题:
SELECT terms, COUNT( id) AS count 
    FROM table 
GROUP BY terms 
ORDER BY terms DESC

你如何创建一个表格,使得结果存储在MySQL表中,而不是在屏幕上显示? - Average Joe
喜欢临时表吗?你可以这样做。但是临时表不会是动态的 - 也就是说,它不会反映对原始表所做的任何更改。 - nickb
Nick,谢谢你。请在这里回答(http://stackoverflow.com/questions/10325352/sql-statement-to-create-a-table-as-a-result-of-a-count-operation),因为我已经将其作为一个单独的问题提出。 - Average Joe

6

阅读:GROUP BY (Transact-SQL)

在SQL中,通过一列或多个表达式的值将选定的一组行分组成一组汇总行。每个组返回一行。SELECT子句列表中的聚合函数提供有关每个组的信息,而不是单个行的信息。

您只需要应用group by子句即可获得结果。

select terms, count (id) as count from table 
group by terms 
order by terms 

1

我有一个非常类似的需求,需要一个二手唱片店按字母顺序显示库存中的艺术家及其数量,例如:

Smokey Robinson和The Miracles(2)| Sonic Youth(2)| Spoon(3)| Steely Dan(1)| Stevie Wonder(2)| Sufjan Stevens(1)|

请注意,在从我的“记录”表中提取时,我使用了SELECT DISTINCT。以下是相关的代码片段:

//QUERY
$arttool = mysql_query("SELECT DISTINCT * FROM records GROUP BY artist ORDER BY artist ASC");

//OUTPUT LOOP START
while($row = mysql_fetch_array($arttool)){

//CAPTURE ARTIST IN CURRENT LOOP POSITION
$current=$row['Artist'];    

//CAPTURING THE NUMBER OF ALBUMS IN STOCK BY CURRENT ARTIST
$artcount = mysql_num_rows(mysql_query("SELECT * FROM records WHERE artist = '$current'"));

//ECHO OUT. 
echo $current . "($artcount)";  

我的网站上的实际代码更加复杂,但这是它的基本结构。希望这有所帮助...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接