CASE types character varying and numeric cannot be matched


问题的描述:

为什么会出现题目当中的CASE type character varying and numeric cannot be matched?

在Postgresql中针对拼接字符串的操作才出现字符串与数字不匹配的概念。

本以为使用concat函数就没问题,但是使用的地方错误造成的原因

下面看一段代码就一目了然了:

EXPLAIN SELECT
se.enroll_number,
s.student_name,
CASE
WHEN pay.pay_method = '支付高校' THEN
0
ELSE
pay.sum_pay
END AS sum_pay,
 concat (
'支付高校',
CASE
WHEN pay.pay_method != '支付高校' THEN
''
ELSE
'' || pay.sum_pay
END
)
AS remark,
 pay.sum_deduct
FROM
(
SELECT
student_id,
pay_method,
SUM (pay_money) AS sum_pay,
SUM (channel_deduct) AS sum_deduct
FROM
payment_detail
WHERE
college_settlement_id = 28
GROUP BY
student_id,
pay_method
) AS pay
LEFT JOIN student AS s ON pay.student_id = s.student_id
LEFT JOIN student_enroll AS se ON pay.student_id = se.student_id


上述这段代码中使用了concat方法,是因为之前在case when的时候在else拼接上的concat方法,造成上述原因,还以为使用的方式不对,虚惊一场。

上述sql算是一个错误的示范,一般情况下不建议这样写,这样太影响性能,拼接的一张表,可以使用union all单步对表数据进行查询(对于上述sql有想法的)可以多提提意见,看看实现的方式有几种?




猜你喜欢

转载自blog.csdn.net/chajinglong/article/details/78301821
今日推荐