2017-06-30 4 views
0

Ich versuche die Summe von Cast_Cost, Shelf_Price und Bottle_Price zu finden, wo die Artikelbeschreibung Scotch oder Canadian Whiskey enthält. Der Wert von Bottle_price ist jedoch ein Preis und nicht numerisch wie die anderen Elemente in der Select-Anweisung. Zuerst versuchte ich diese Abfrage, und es wurde ein Fehler zurückgegeben, da bottle_price anders gewürfelt werden musste.Cast und Sum Funktionen - PostgreSQL

select SUM(case_cost)+SUM(shelf_price)+SUM(bottle_price) as total 
from public.products 
where item_description ilike '%Scotch%' or item_description ilike '%Canad%'; 

Anschließend erstellte ich mehrere verschiedene Abfragen und erhielt immer Fehlermeldungen. Dies ist mein letzter Versuch, einfach versuchen, das Casting direkt für bottle_price zu bekommen, und vielleicht enthalten ich zu viele Klammern, aber ich erhalte eine Fehlermeldung bei dem „AS“ numeric Abschnitt:

select (cast(sum (bottle_price AS numeric))) 
from public.products 
where item_description ilike '%Scotch%' or item_description ilike '%Canad%';  

kann jemand helfen mit diesem Casting-Problem?

+1

Was ist der tatsächliche Datentyp von "Bottle_price"? (PostgreSQL hat keinen Datentyp namens * price *.) Wie sehen die Werte in dieser Spalte aus? –

Antwort

1

Erste cast dann sum die resultierenden numerischen Werte

select sum(cast(bottle_price AS numeric)) 
from public.products 
where item_description ilike '%Scotch%' or item_description ilike '%Canad%'; 
0

funktionierts?

select (SUM(case_cost::numeric) + SUM(shelf_price::numeric) + SUM(bottle_price::numeric) 
     ) as total 
from public.products 
where item_description ilike '%Scotch%' or item_description ilike '%Canad%'; 

Ich finde das Postgres spezifische :: Syntax zum Gießen sehr bequem zu sein. Auf der anderen Seite finde ich es seltsam, dass Postgres nicht erlaubt, dass Geld addiert wird (standardmäßig).

1

Je nach gewünschtem Ergebnistyp könnte es

SUM(case_cost)+SUM(shelf_price)+SUM(bottle_price)::numeric as total 

für numeric Ergebnis oder

SUM(case_cost)::money+SUM(shelf_price)::money+SUM(bottle_price) as total 

für money Folge sein.