2010-03-05 110 views
2
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表; 我的问题,可能有一个像下面的结果,一个查询?选择... GROUP BY

[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

回答

2

SELECT A_ID,a_type, COUNT(*)FROM 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  | 
+0

忘了提及GROUP_CONCAT可能是MySQL特定的。 不能把代码放在评论中,所以看到我编辑的答案。 – OverClocked 2010-03-05 15:46:28

+0

是的,你是对的!它工作得很好,我的错误,再次抱歉! PS:我仍然不能投票,但你知道!为你的队友+1! – 2010-03-05 16:02:17

+0

你可以用反引号将注释放在注释中,例如'int i = 1;' – Andomar 2010-03-05 23:50:36

0
SELECT * FROM table group by a_id 

使用GROUP BY语句,您可以按一列或多列 GroupBy Statement

+0

对不起,Marcx,但这不计算多少“苹果类型”PER“a_id”,并没有显示所有的“苹果类型”每个“a_id”! ;-) – 2010-03-05 14:42:04

1

的数据,您可以创建一个这样的名单有group by

select a_id, a_type, count(*) 
from AppleTable 
group by a_id, a_type 
+0

感谢Andomar,但我自己也用过这个,但结果是这样的:a_id = Pink Lady:1,a_id = Granny Smith:2而不是我需要的紧凑形式! – 2010-03-05 14:50:23

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,类型)的结果究竟有多少作为一组。

+0

谢谢,但是这会产生与Andomar相同的结果! ;-( – 2010-03-05 15:12:48