1

美好的一天我有一个关于我的非功能代码的问题。如您所见,我想用联合连接一些表。我想获得营销应用程序的记录,但我需要使用一些算术运算符。问题是即使我将数据类型设置为数字,代码也不起作用(但在另一个转换中没有问题)并报告错误“数字值''无法识别”我正在发送完整的代码,但是问题这条线是:

(case when skl."impressions_sklik" = 0 then 0
  when skl."clicks_sklik" = 0 then 0
  when skl."clicks_sklik" = '' then 0
  when skl."impressions_sklik" = '' then 0
  ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or 
     skl."clicks_sklik" = '', 0, skl."clicks_sklik")  / 
    iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL 
     or 
    skl."impressions_sklik" = '', 0, skl."impressions_sklik"))
    END) as "CTR"
    FROM "sklik" skl

或这个:

(case when skl."impressions_sklik" = 0 then 0
   when skl."clicks_sklik" = 0 then 0
   when skl."clicks_sklik" = '' then 0
   when skl."impressions_sklik" = '' then 0
   when skl."clicks_sklik" IS NULL then 0
   WHEN skl."impressions_sklik" IS NULL then 0
   ELSE (skl."clicks_sklik" / skl."impressions_sklik")
   END) as "CTR"

或者这个,没有任何效果:

(case when skl."impressions_sklik" = 0 or skl."clicks_sklik" = 0 then 
skl."clicks_sklik" / skl."impressions_sklik" = 0
   when skl."clicks_sklik" = '' or skl."impressions_sklik" = '' then 
skl."clicks_sklik" / skl."impressions_sklik" = 0
   when skl."clicks_sklik" IS NULL or skl."impressions_sklik" IS NULL 
then skl."clicks_sklik" / skl."impressions_sklik" = 0
   ELSE (skl."clicks_sklik" / skl."impressions_sklik")
END) as "CTR"
FROM "sklik" skl

你能帮我吗?

完整代码:

SELECT
adw."adwords" as "Type",
adw."campaignID_adwords" as "campaignID",
adw."impressions_adwords"as "impression",
adw."CTR_adwords" as "CTR"
FROM "adwords" adw
UNION
select
skl."sklik" as "Type",
skl."Campaign_id_sklik" as "campaignID",
skl."impressions_sklik" as "impression",
  (case when skl."impressions_sklik" = 0 then 0
   when skl."clicks_sklik" = 0 then 0
   when skl."clicks_sklik" = '' then 0
   when skl."impressions_sklik" = '' then 0
   ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or 
skl."clicks_sklik" = '', 0, skl."clicks_sklik")  / 
iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL or     
skl."impressions_sklik" = '', 0, skl."impressions_sklik"))
END) as "CTR"
 FROM "sklik" skl
UNION
select
fad."facebook_ads" as "Type",
fad."cam_campaign_id_facebook_ads" as "campaignID",
fad."cam_impressions_facebook_ads" as "impression",
fad."cam_ctr_facebook_ads" as "CTR"
FROM "facebook_ads" fad
4

1 回答 1

1

你在这里有两个不同的问题。

首先,如果 "impressions_sklik" 和 "clicks_sklik" 定义为 NUMERIC,则将它们与文本值 '' 进行比较是无效的。那是您收到“无法识别数值的消息”的地方

其次,如果“impressions_sklik”为 NULL,您将在 CASE 语句中遇到被零除的问题。

要解决这两个问题,请重写为更简单的以下表达式:

(case 
    when skl.impressions_sklik = 0 or skl.impressions_sklik IS NULL then 0
    when skl.clicks_sklik = 0 or skl.clicks_sklik IS NULL then 0
    ELSE ( skl.clicks_sklik  / skl.impressions_sklik)
END) as CTR
于 2018-01-04T20:33:56.360 回答