2010-07-17 8 views
2

J'utilise Derby.
J'ai une table avec deux colonnes X et Y.
Je veux sélectionner la colonne X mais grouper par colonne Y.
Cela signifie que je veux afficher seulement une valeur X pour chaque ligne avec la première valeur Y à elle.SQL Derby: GROUP BY non sélectionné id

Comment est-ce que je peux faire ceci?

CREATE TABLE test (
    x INTEGER NOT NULL , 
    y INTEGER NOT NULL) 

INSERT INTO test VALUES (1,1) ,(1,2) ,(1,3) ,(2 ,3),(3,3) 

SELECT y FROM test GROUP BY x -- does not work 

je veux toutes les valeurs y sans double

données brutes

 
X Y 
-- -- 
1 1 
1 2 
1 3 
2 3 
3 3 

Les résultats devraient être:

 
X Y 
-- -- 
1 1 
1 2 
2 3 
+0

quel agrégat vouliez-vous sur ce 'x' - MAX, MIN? –

+1

Quelle est la "première valeur Y" dans votre cas? – Gumbo

+0

Votre question est un peu floue. Publier quelques exemples de données et votre sortie souhaitée pour ces données serait vraiment utile. –

Répondre

0

Vous devez spécifier X que vous voulez.

select 
    min(X) X 
from 
    table 
group by 
    Y 
4

Vous avez à aggregatex d'une certaine façon:

SELECT Y, 
     MAX(X) AS Max_X, 
     AVG(X) AS Avg_X 

FROM  myTable 
GROUP BY Y 
ORDER BY Y 

Minimum, Maximum, moyenne, First, Last, etc.

Si vous ne vous souciez pas qui vous x obtenir, peut-être simplement choisir le premier ou le dernier:

SELECT Y, 
     First(X) AS X, 
FROM  myTable 
GROUP BY Y 
+0

Je n'ai pas besoin de méthode agrégée J'ai besoin des valeurs sans doublon – shay

0

Je ne suis pas familier avec Derby, mais essayez une sous-requête comme:

SELECT X 
FROM table 
WHERE Y in (SELECT MIN(Y) FROM table) 

Ici SELECT MIN(Y) FROM table est de sélectionner la valeur Y (à savoir votre "première valeur Y", ici: le minimum de Y).