2017-02-11 8 views
0

Ich habe versucht, dieses Problem für eine Stunde oder so auszuarbeiten und kann es einfach nicht herausfinden. Darf mich bitte jemand in die richtige Richtung weisen? Ich arbeite mit den Daten aus dem OE-Schema von Oracle SQL Developer.Prozentualen Rabatt auf Oracle SQL Developer berechnen

Ich muss den Produktkategorie-Namen für Produkte anzeigen, die den größten Rabatt in% vom list_price haben.

Dies ist mein Code:

SELECT ct.category_name, ROUND((pi.list_price pi.min_price)*100/pi.list_Price) AS Percent_Discount 
FROM  oe.product_information pi JOIN oe.categories_tab ct ON pi.category_id = ct.category_id 
GROUP BY ct.category_name, ROUND((pi.list_price-pi.min_price)*100/pi.list_Price) 
ORDER BY ROUND((pi.list_price-pi.min_price)*100/pi.list_Price) desc; 

Here is an image of my results of the query

Die Ergebnisse tatsächlich gehen den ganzen Weg hinunter zu 150ish oder so, die jedes einzelne Produkt enthält.

Meine Frage ist: Wie bekomme ich es, so ist meine Prozentzahl zwei Dezimalstellen, anstatt es in eine ganze Zahl gerundet wird? Ich verstehe, dass ich die runde Aussage verwendet habe, aber ich habe es nur gemacht, weil ohne sie die Zahlen ungefähr 15 Ziffern sind. Denken Sie auch, dass mein Code das Problem richtig beantwortet? Ich denke, ich sollte nur die Top 10 oder 20 Kategorien mit dem größten Rabatt zeigen. Gibt es das überhaupt, könnte ich das tun, anstatt alle aufzuzählen?

Antwort

1

ROUND() nimmt ein zweites Argument, das ist die Anzahl der Dezimalstellen, die Sie wollen (siehe here). Also:

SELECT ct.category_name, 
     MAX(ROUND((pi.list_price - pi.min_price)*100/pi.list_Price, 2)) AS Percent_Discount 
FROM oe.product_information pi JOIN 
    oe.categories_tab ct 
    ON pi.category_id = ct.category_id 
GROUP BY ct.category_name 
ORDER BY 2 desc; 

Hinweis: Wenn Sie eine Zeile pro Kategorie wollen, dann category_name sollte der einzige Schlüssel im GROUP BY sein.

+0

Vielen Dank noch einmal! Nur zur Klarstellung, die Max-Anweisung wird verwendet, um den größten% Rabatt-Teil der Frage zu beantworten? Und ich verstehe nicht ganz, wie kommt es, dass du nur "2" im ORDER BY Teil benutzt hast, kannst du das bitte für mich erklären? –

+0

@KurtLee. . . Das 'max()' soll den "größten% Rabatt" beantworten. Die "2" ist eigentlich nur eine Abkürzung, weil ich nicht "Percent_Discount" eingeben wollte. –