2010-03-05 109 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