2011-04-07 5 views
6
SELECT MIN(retail) 
FROM books 
WHERE category = 'COMPUTER' 

fonctionne très bien, mais quand j'inclure le titre dans une sélection, comme:ORA-00937: pas un seul groupe fonction de groupe

SELECT MIN(retail), title 
FROM books 
WHERE category = 'COMPUTER' 

il ne fonctionne pas. Pourquoi? Comment le faire fonctionner?

+2

Que spécifiquement voudriez-vous faire, en anglais plaine? –

+1

duplication possible de [SQL pas une fonction de groupe mono-groupe] (http://stackoverflow.com/questions/1795198/sql-not-a-single-group-group-function) –

Répondre

8

La réponse de Rhys est correcte, si c'est ce que vous voulez dire, mais vous pourriez avoir voulu le title (s) où retail=MIN(retail), et que le libellé indique comment obtenir cette réponse:

SELECT title, retail 
FROM books 
WHERE category = 'COMPUTER' 
AND retail = (SELECT MIN(retail) FROM books WHERE category = 'COMPUTER') 

pour réduire le double emploi, vous pouvez utiliser une clause WITH (si vous utilisez une version récente de SQL):

;WITH ComputerBooks AS (
    SELECT title, retail 
    FROM books 
    WHERE category = 'COMPUTER') 
SELECT title, retail 
FROM ComputerBooks 
WHERE retail = (SELECT MIN(retail) FROM ComputerBooks) 

Sample I used to confirm syntax.

+0

C'est ce que je voulais dire. – user490735

+1

Pourquoi a-t-il besoin de telles constructions dupliquées? – user490735

+0

Il semble que je doive spécifier une condition pour chaque colonne, puis une condition plus générale (titre FROM books WHERE category = 'ORDINATEUR') est réduite à un niveau plus spécifique. Mais pourquoi ne pas avoir une syntaxe permettant de spécifier d'autres colonnes à partir de l'enregistrement récupéré compte tenu d'une condition spécifique pour une colonne? – user490735

6

MIN s'applique à un groupe d'enregistrements, vous devez donc lui indiquer le groupe d'enregistrements que vous voulez dire.

Si vous voulez dire pour chaque titre, montrer le minimum de vente au détail, alors vous avez besoin:

SELECT MIN(retail), title FROM books 
WHERE category = 'COMPUTER' 
GROUP BY title 
Questions connexes