如何解决尽管查询中有 case 语句,但只在结果中显示某些列
CREATE TABLE inventory (
id SERIAL PRIMARY KEY,product VARCHAR,quantity DECIMAL,avg_price DECIMAL,normal_price DECIMAL
);
INSERT INTO inventory
(product,quantity,avg_price,normal_price)
VALUES
('product_01','800','10','10'),('product_01','300','20','90'),'200','0','50'),'500','30','80'),'600','60'),'400','50','40');
预期结果:
product | quantity | final_price |
-------------|--------------|----------------|--------------
product_01 | 800 | 10 |
product_02 | 300 | 20 |
product_03 | 200 | 50 |
product_04 | 500 | 30 |
product_05 | 600 | 60 |
product_06 | 400 | 50 |
我只想显示列quantity
和final_price
。
但是,我必须在查询中使用 CASE statement
并且 postgresSQL
中的语法迫使我将列 avg_price
和 normal_price
添加到查询中使 CASE statement
工作:
SELECT
iv.product AS product,iv.avg_price AS avg_price,iv.normal_price AS normal_price,SUM(iv.quantity) AS quantity,(CASE WHEN iv.avg_price = 0 THEN iv.normal_price ELSE iv.avg_price END) AS final_price
FROM inventory iv
GROUP BY 1,2,3
ORDER BY 1;
不确定在 postgresSQL
中是否可行,但有没有办法只显示两列,如预期的结果?
解决方法
我建议按表达式本身聚合:
SELECT iv.product AS product,SUM(iv.quantity) AS quantity,(CASE WHEN iv.avg_price = 0 THEN iv.normal_price ELSE iv.avg_price END) AS final_price
FROM inventory iv
GROUP BY iv.product,final_price
ORDER BY 1;
,
使用显式 GROUP BY iv.product,iv.avg_price,iv.normal_price
而不是 GROUP BY 1,2,3
:
SELECT
iv.product AS product,iv.normal_price
ORDER BY 1;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。