2017-06-30 50 views
0

我試圖找到cast_cost,shelf_price和bottle_price的總和,其中項目描述包括蘇格蘭威士忌或加拿大威士忌。然而,Bottle_price的價值是一個價格,而不是像select語句中的其他項那樣的數字。起初,我嘗試了這個查詢,並且由於bottle_price需要以不同的方式進行Cast,所以它返回了一個錯誤。Cast和Sum函數 - 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%'; 

之後,我創建了幾個不同的查詢並不斷收到錯誤消息。這是我最近在簡單地試圖讓鑄造適合bottle_price,也許我包含了太多括號的嘗試,但我在「AS」的數字部分得到一個錯誤:

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

任何人的幫助有這個鑄造問題?

+1

「Bottle_price」的實際數據類型是什麼? (PostgreSQL沒有名爲* price *的數據類型。)該列中的值是什麼樣的? –

回答

1

首先cast然後sum得到的數值

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

工作的呢?

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%'; 

我發現特定於Postgres的::語法非常方便。另一方面,我感到奇怪的是,Postgres不允許將錢加起來(默認情況下)。

1

取決於期望的結果類型可能是

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

numeric結果或

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

money結果。