2010-03-05 5 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 테이블이 있다고 가정합니다. 내 질문에 하나의 검색어로 아래와 같은 결과를 얻을 수 있습니까?SELECT ... 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, Apple GROUP BY a_id, a_type부터 COUNT (*)까지

이렇게하면 별개의 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

+0

네, 맞습니다! 괜찮 았어, 내 실수, 미안! 추신 : 나는 여전히 투표 할 수는 없지만 알고 있습니다! +1 당신을 위해 친구! –

+0

'int i = 1;과 같은 backticks를 사용하여 주석에 코드를 넣을 수 있습니다. – Andomar

0
SELECT * FROM table group by a_id 

그룹화 하나 이상의 열 GroupBy Statement

+0

죄송합니다. Marcx하지만이 "Apple Type"PER "a_id"의 ​​수를 계산하지 않으며 "a_id"당 "Apple Type"을 모두 표시하지 않습니다! ;-) –

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 그리고 꼭 필요한 소형 폼이 아닙니다! –

0

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

그런 식으로, 당신은 애플 ID를 받고있어 같은 distinctgroup by 사용하며 (ID 입력) 결과를 그룹으로 얼마나 많은뿐만 아니라 유형의 .

+0

감사하지만이 결과는 Andomar에서 나온 것과 같습니다! ;-( –