【问题标题】:UNION types integer and text cannot be matched.in postgreSQLUNION 类型整数和文本无法匹配。在 postgreSQL 中
【发布时间】:2023-01-30 10:03:46
【问题描述】:
select product_name ,0 price1,0 price2,0 price3,
(CASE when sum(price)>100 then 1 else 0 end) as price4,0 price5
 from sales_1
 group by product_name,price
 union 
 select product_name ,0 price1,0 price2,0 price3, 0 price4,
(CASE when sum(price)<100 then 'yes' else 'no' end) as price5
 from sales_1
 group by product_name,price

我希望小于 100 的值变成“否”,其他值变成“是”,但它抛出一个错误,即“UNION 类型整数和文本无法匹配”。我尝试了不同类型的转换来解决它但是它没有。我在 postgresql 中做

【问题讨论】:

  • 将该列转换为 TEXT,因为“是”和“否”不能是整数。
  • 你能制定你的目标吗?一般在group by中使用一列(pricesum 中不是一个有意义的方法。
  • 联盟上半年使用'0' price5
  • @MarmiteBomber 实际上我想要价格栏中的特定日期数据,所以这就是我这样做的原因。我已经在这里发布了我的答案,它给出了我需要的结果。但是谢谢你!

标签: postgresql union-all


【解决方案1】:

这是让我得到所需结果的代码:

SELECT product_name,
       0 price1, 0 price2, 0 price3,
       (CASE WHEN SUM(price)>100 THEN 'yes' ELSE 'no' END) AS price4,
       '' price5 
FROM sales_1
GROUP BY product_name,price
 
UNION ALL

SELECT product_name, 
       0 price1, 0 price2, 0 price3, '' price4,
       (CASE WHEN SUM(price)<100 THEN 'yes' ELSE 'no' END) AS price5
FROM sales_1
GROUP BY product_name, price

这是我从上层查询得到的结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多