SELECT ... GROUP BY

时间:2010-03-05 14:32:39

标签: mysql select group-by

id  - a_id  -  a_type
---------------------------
1      9       Granny Smith
2      9       Pink Lady
---------------------------
3      3       Pink Lady 
4      3       Fuji 
5      3       Granny Smith
---------------------------
6      7       Pink Lady
7      7       Fuji 
8      7       Fuji
9      7       Granny Smith

好的,假设我们有一个像上面这样的Apple sql表; 我的问题,可以通过一个查询获得如下结果吗?

[0] => Array
    (
        [0] => a_id: 7
        [1] => Pink Lady: 1
        [2] => Granny Smith: 1
        [3] => Fuji: 2
    )

[1] => Array
    (
        [0] => a_id: 9
        [1] => Granny Smith: 1
        [2] => Pink Lady: 1
        [3] => 
    )
...

PS:我自己的查询是:

SELECT a_type , a_id , 
COUNT(a_type) AS tot 
FROM #apple 
GROUP by a_id , a_type 
HAVING tot > 0 
ORDER BY a_type DESC

但是这不能满足我的需要,它会产生多个a_id

4 个答案:

答案 0 :(得分:2)

选择a_id,a_type,COUNT(*)来自Apple GROUP BY a_id,a_type

这将为您提供一个不同的a_id和a_type元组的列表,但您仍然需要解析列表以将相同a_id的那些合并到一个哈希表中。

或者,如果您想在一个步骤中按a_id汇总所有内容,请执行此操作

SELECT a_id,GROUP_CONCAT(type_count)
  FROM (SELECT a_id,a_type,CONCAT(a_type,",",COUNT(*)) as type_count
          FROM Apple GROUP BY a_id,a_type) as x
 GROUP BY a_id;

这会让你:

7    Pink Lady,1,Granny Smith,1,Fuji 2
9    Granny Smith,1,Pink Lady,1

关于我的评论:如果你有MySQL,这就是你得到的

使用确切的数据创建您拥有的确切表格,并运行我的查询,我得到以下内容。

mysql> SELECT a_id,GROUP_CONCAT(type_count) FROM (SELECT a_id,a_type,CONCAT(a_type,",",COUNT(*)) as type_count FROM Apple GROUP BY a_id,a_type) as x  GROUP BY a_id;

|    3 | Fuji,1,Granny Smith,1,Pink Lady,1 | 
|    7 | Fuji,2,Granny Smith,1,Pink Lady,1 | 
|    9 | Granny Smith,1,Pink Lady,1        | 

答案 1 :(得分:1)

您可以使用group by

创建类似的列表
select a_id, a_type, count(*)
from AppleTable
group by a_id, a_type

答案 2 :(得分:0)

SELECT * FROM table group by a_id

使用group by语句,您可以按一列或多列对数据进行分组 GroupBy Statement

答案 3 :(得分:0)

使用distinctgroup by这样的

select distinct(a_id), a_type, count(a_type) as total_types
from Apple
group by a_id, a_type;

这样,您就可以获得Apple ID及其类型以及有多少(id,type)结果。