2011-04-19 5 views
10

je le tableau suivantgroupe SQL par plusieurs colonnes

CREATE TABLE actions (id INTEGER PRIMARY KEY, key1 NUMERIC, key2 NUMERIC); 

Je ne suis même pas sûr de savoir comment expliquer cela, donc je pense qu'il est préférable que je donne un exemple:

id key1 key2 
1 1 1 
2 1 2 
3 1 1 
4 2 1 
5 2 3 

à Ouput quelque chose comme ceci:

key1 key2 count(id) 
1 1 2 
1 2 1 
2 1 1 
2 3 1 

J'ai essayé quelque chose comme ça, mais ça ne fonctionne pas, parce que j'ai besoin le champ key1 de ne pas être unique:

Select key1,key2,count(id) from actions group by key2, order by key1 

Merci beaucoup

+0

Pourquoi ne pas regrouper par les deux: key1 et key2? De cette façon, key1 ne sera pas unique. Unique sera la combinaison des touches. –

Répondre

13
SELECT key1, key2, COUNT(id) FROM actions GROUP BY key1, key2 ORDER BY key1, key2 
3

Dans la clause GROUP, vous devez écrire tous les champs qui ne sont pas dans le agrégat (COUNT, MAX, MIN). Donc, dans ce cas, vous devez ajouter le champ key1, comme ceci:

Select key1, key2, count(id) 
from actions 
group by key1, key2 
order by key1