2017-08-10 2 views
0

(Utilisation d'Oracle sqldeveloper) J'ai besoin pour générer une instruction SQL qui va trouver le nombre de couleurs distinctes où la forme est un carré, mais jamais un cercle.SQL Sélectionnez COL1 distinct où COL2 est _ et COL2 EST JAMAIS _?

Le tableau ci-dessous est intitulé: MyObjects

Actuellement, mon instruction SQL (qui est imcomplete) est la suivante:

SELECT DISTINCT COLOR, SHAPE FROM MYOBJECTS WHERE ((SHAPE = 'square') AND (..........)); 

enter image description here

Pour votre information, la réponse devrait être:

COULEUR | SHAPE
jaune | carré
marron | carré

Quelqu'un peut-il aider ??

Répondre

2

Hmmm. . . Une méthode consiste en deux niveaux d'agrégation. Une autre utiliseraient les sous-requêtes:

SELECT COUNT(DISTINCT COLOR) 
FROM MYOBJECTS o 
WHERE SHAPE = 'square' AND 
     NOT EXISTS (SELECT 1 
        FROM MYOBJECTS o2 
        WHERE o2.color = o.color AND o2.SHAPE = 'circle' 
       ); 

EDIT:

Oh, je remarque que vous voulez que les lignes individuelles, et non pas le nombre:

SELECT DISTINCT COLOR, SHAPE 
FROM MYOBJECTS o 
WHERE SHAPE = 'square' AND 
     NOT EXISTS (SELECT 1 
        FROM MYOBJECTS o2 
        WHERE o2.color = o.color AND o2.SHAPE = 'circle' 
       ); 
0

je pense que vous avez juste besoin GROUP BY

SELECT COLOR, SHAPE 
FROM MYOBJECTS 
WHERE SHAPE = 'square' 
GROUP BY COLOR 
1

L'autre group by réponse est incorrecte, mais l'exercice mental pour ce qu'il t Ake de le faire avec le groupe par ...

SELECT color FROM MYOBJECTS GROUP BY color HAVING SUM(shape = 'square') > 0 AND SUM(shape = 'circle') = 0