2016-02-16 96 views
-2

描述我有一個表命名爲BoxPostgreSQL的:我怎樣才能得到所需的輸出低於

盒包含以下項目:

1. pen 

2. pencil 

3. scale 

4. eraser 

5. sharpener 

實際的表結構如下:

No  Item  quantity  bought_date 
_______________________________________________ 

1.  pen    3  14-12-2016 

2.  pencil    10  15-12-2016 

3.  pen    5  16-12-2016 

4.  eraser    7  16-12-2016 

5. sharpener    6  17-12-2016 

6.  pencil    3  18-12-2016 

7.  pen    3  18-12-2016 

需要輸出:

Item   Total_quantity 
___________________________ 

Pencil     13 

Pen      11 

Eraser     7 

Sharpener     6 

Scale      0 
___________________________ 

total     37 

請幫我這個查詢...

+0

你這樣做的遠,怎麼回事? –

+0

嘗試使用'GROUP BY',並結合SUM。 – jarlh

+0

我有表中的行,但我沒有得到「規模」(這是不存在的表),我無法通過計數(數量)達到「秩序」 –

回答

0

你可以這樣做:

SELECT t.item,sum(cast(coalese(b.quantity,'0') as integer)) as total_quantity FROM (
    SELECT 'pen' as item 
    UNION 
    SELECT 'pencil' as item 
    UNION 
    SELECT 'scale' as item 
    UNION 
    SELECT 'eraser' as item 
    UNION 
    SELECT 'sharpener' as item) t 
LEFT OUTER JOIN box b 
ON(t.item = b.item) 
GROUP BY t.item 
UNION 
(SELECT 'total',sum(quantity) 
FROM box) 

我根據您的意見調整了代碼,我認爲這是你想要的。

+0

感謝您的答案@ sagi我有疑問**讓說,表中沒有「數量」欄和鉛筆,鉛筆等物品重複多次這是一個varchar的時間。你可以建議我可以在你的答案中做些改變嗎?謝謝 –

0
select it, sum(s) s from 
(
select b.item it, sum(b.qty::integer) s from box b group by b.item 
union 
select 'total' as item ,sum(qty::integer)total from box group by item 
) as un group by un.it; 
+0

那麼箱子裏沒有任何數量的東西呢?他說數量是varchar的事實呢? – sagi

+0

立即檢查更改 –

+0

仍然不能用於箱表中缺失的項目。 – sagi

0

更短,更方便的方法是:

with items(item_no, item_name) as (
    values 
    (1, 'pen'), 
    (2, 'pencil'), 
    (3, 'scale'), 
    (4, 'eraser'), 
    (5, 'sharpener') 
) 
select 
    items.item_name, 
    coalesce(sum(box.quantity::int), 0) as total_quantity 
from 
    items 
    left join box on (box.item = items.item_name) 
group by 
    items.item_name 

union all 

select 
    'total', 
    coalesce(sum(box.quantity::int), 0) 
from 
    box 
+0

感謝您的答案@ Abelisto 我有一個疑問 **讓說,表中沒有「數量」欄和鉛筆,鉛筆等物品重複多次,這是一個varchar。你能否建議我可以在你的回答中做些改變。謝謝** –

+0

@saivenkatavinaypasupuleti據我所知,對於10支鉛筆,你的表中有10行而不是一行和字段'quantity'?如果是這樣,則將'sum(box.quantity :: int)'替換爲'count(1)'。 – Abelisto

+0

是的,你是對的,我會替換並嘗試它。謝謝 –