2016-02-16 4 views
-2

У меня есть таблица с именем Box:Postgresql: как я могу получить желаемый результат, как описано ниже

Box содержит следующие пункты:

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 у меня есть сомнения ** Скажем, что в таблице нет столбца «количество», а перо, карандаш и т. Д. Повторяется несколько раз времен, который является варчаром. вы можете предложить мне изменения, которые я могу сделать в вашем ответе. ** спасибо –

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

Что относительно предметов, которые не имеют количества в коробке? как насчет того факта, что он сказал, что количество является варчаром? – 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 строк в таблице вместо одной строки и поля 'количество'? Если это так, замените 'sum (box.quantity :: int)' на 'count (1)'. – Abelisto

+0

Да, вы правы, я заменю и попробую.спасибо –

Смежные вопросы