首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自数字列和hstore的PostgreSQL、SUM和GROUP

来自数字列和hstore的PostgreSQL、SUM和GROUP
EN

Stack Overflow用户
提问于 2016-10-31 18:48:57
回答 1查看 244关注 0票数 2

我想问一下,是否有人能为我做一个查询,这个查询可以从数字列和hstore列中总结值。显然,这对我的SQL能力来说太大了。

桌子:

代码语言:javascript
复制
DROP TABLE IF EXISTS mytry; 
CREATE TABLE IF NOT EXISTS mytry 
   (mybill int, price numeric, paym text, combined_paym hstore); 
INSERT INTO mytry (mybill, price, paym, combined_paym)
VALUES (10,  10.14, '0', ''),
       (11,  23.56, '0', ''),
       (12,  12.16, '3', ''),
       (13,  12.00, '6', '"0"=>"4","3"=>"4","2"=>"4"'),
       (14,  14.15, '6', '"0"=>"2","1"=>"4","3"=>"4","4"=>"4.15"'),
       (15,  13.00, '1', ''),
       (16,   9.00, '4', ''),
       (17,   4.00, '4', ''),
       (18,   4.00, '1', '');

这是一个清单的帐单,价格和支付方法为每一张。

有些票据(在这里13和14)可以合并支付。付款方法从0到5之间列举,这说明了具体的支付方法。

为此,我提出以下查询:

代码语言:javascript
复制
SELECT paym, SUM(price) FROM mytry WHERE paym::int<6 GROUP BY paym ORDER BY paym;

这是支付方法0-5的价格。6不是支付方式,而是一个标志,这意味着我们应该在这里考虑支付方式和价格从hstore‘组合_paym’。这就是我不知道怎么解决的。将“联合支付”的支付方法和价格与“paym”和“price”的支付方法和价格相加。

此查询提供结果:

代码语言:javascript
复制
"0";33.70
"1";17.00
"3";12.16
"4";13.00

但结果是不正确的,因为这里没有从比尔的13和14的总和数据。

真正的结果应该是:

代码语言:javascript
复制
"0";39.70
"1";21.00
"2";4.00
"3";20.16
"4";17.15

如果有人能给我适当的查询,这将给出最后的结果,从给定的数据。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-31 19:06:20

取消hstore列:

代码语言:javascript
复制
select key, value::dec
from mytry, each(combined_paym)
where paym::int = 6

 key | value 
-----+-------
 0   |     4
 2   |     4
 3   |     4
 0   |     2
 1   |     4
 3   |     4
 4   |  4.15
(7 rows)

并联合使用:

代码语言:javascript
复制
select paym, sum(price)
from (     
    select paym, price
    from mytry
    where paym::int < 6
    union all
    select key, value::dec
    from mytry, each(combined_paym)
    where paym::int = 6
    ) s
group by 1
order by 1;

 paym |  sum  
------+-------
 0    | 39.70
 1    | 21.00
 2    |     4
 3    | 20.16
 4    | 17.15
(5 rows)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40348622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档