2016-05-28 11 views
-1

Ich versuche, den Titel, ISBN, Kosten und Kategorie anzuzeigen, wo die Kategorie die geringste Anzahl von Büchern enthält, während auch versucht wird, ein "$" vor der Ausgabe für Kosten hinzuzufügen beim Versuch, es auf zwei Dezimalstellen zu runden.

Beispiel für die Kategorie =

Technology = 4 
Family = 3 
Sports = 2 
Business = 4 

In diesem Fall möchte ich die Ausgabe

Kategorie Sport
Select TITLE, ISBN, 
Round('$' + CAST(COST AS VARCHAR(15)) COST, 2), 
CATEGORY 
From BOOKS 
GROUP By category 
HAVING Category = ((Select Min(Category) 
From (Select Count(Category) AS Category) 
From BOOKS 
Group By Category) 
; 
+0

Diese Art der Formatierung ist besser in der Anwendung (GUI), nicht in der SQL gemacht. –

Antwort

1

Oracle verwendet || für String-Verkettung anzuzeigen. Um die Kategorien mit Mindestanzahl zu erhalten, können Sie Inline-Ansichten verwenden, eine für die Anzahl und die andere für die Mindestanzahl und join für die Originaltabelle.

select b.TITLE, b.ISBN, 
'$' || TO_CHAR(ROUND(b.COST,2)) cost, b.CATEGORY 
From BOOKS b 
join (select category,count(*) cnt from books group by category) ct 
on b.category = ct.category 
join (select min(cnt) mincnt 
     from (select count(*) cnt from books group by category)) minct 
on ct.cnt = minct.mincnt 
+0

Was ist, wenn Sie mehrere Kategorien mit der gleichen Anzahl an Büchern haben? – aofe1337

+0

Möchten Sie alle Bücher für eine Kategorie auswählen, die eine Mindestzahl von Zeilen in der Tabelle haben? –

+0

Beispiel wenn Geschäft 1 und Sport 1 hatte, würde ich beide anzeigen wollen. Entschuldigung - ich hätte mich im ursprünglichen Post klarer machen sollen – aofe1337