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

Ok, en supposant que nous ayons une table Apple sql comme ci-dessus; ma question, est possible d'avoir un résultat comme ci-dessous, avec une requête?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: ma requête est la suivante:

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 

mais cela ne produit elle pas ce que je dois, plus d'un a_id.

Répondre

2

SELECT a_id, a_type, COUNT (*) FROM Apple GROUP BY a_id, a_type

Ceci vous donnera une liste de tuples distincts a_id et a_type, mais vous devrez toujours analyser la liste pour consolider ceux du même a_id dans une seule table de hachage.

Ou, si vous voulez, en une seule étape, regrouper tous par a_id, faire

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; 

Cela vous obtenez:

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

En ce qui concerne mon commentaire: si vous avez MySQL ce est ce que vous obtenez

Création de la table exacte que vous avez, avec les données exactes, et exécuter ma requête, je comprends ce qui suit.

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

J'ai oublié de mentionner que GROUP_CONCAT peut être spécifique à MySQL. Impossible de mettre du code dans le commentaire, consultez donc ma réponse éditée. – OverClocked

+0

Oui, vous avez raison! ça a bien fonctionné, mon erreur, désolé encore! PS: je ne peux pas encore voter mais tu sais! +1 pour vous mate! –

+0

Vous pouvez mettre du code dans les commentaires avec des guillemets, comme 'int i = 1;' – Andomar

0
SELECT * FROM table group by a_id 

en utilisant le groupe par déclaration, vous pouvez regrouper les données par une ou plusieurs colonnes GroupBy Statement

+0

désolé, Marcx mais cela ne compte pas combien de "Apple Type" PER "a_id" et ne pas afficher tous les "Apple Type" par "a_id"! ;-) –

1

Vous pouvez créer une liste comme ça avec un group by:

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

Merci Andomar, mais j'ai aussi utilisé celui-ci par moi-même, mais le résultat est comme ceci: a_id = Pink Lady: 1, a_id = Granny Smith: 2 et pas la forme compacte dont j'ai besoin! –

0

Utilisez le distinct et group by comme celui-ci

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

De cette façon, vous obtenez l'identifiant Apple et il est des types ainsi que le nombre (id, type) les résultats sont là en tant que groupe .

+0

merci mais cela produit le même résultat que celui d'Andomar! ;-( –