大佬教程收集整理的这篇文章主要介绍了尽管查询中有 case 语句,但只在结果中显示某些列,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
DB-Fiddle
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;
以上是大佬教程为你收集整理的尽管查询中有 case 语句,但只在结果中显示某些列全部内容,希望文章能够帮你解决尽管查询中有 case 语句,但只在结果中显示某些列所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。