错误: 函数 round(double precision, integer) 不存在 LINE 6: ROUND( SUM ( COALESCE ( jzmj, 0 ) ) / 10000, 2 ) AS totalar... ^ HINT: 没有匹配指定名称和参数类型的函数. 您也许需要增加明确的类型转换.
时间: 2024-03-09 10:50:58 浏览: 129
这个错误提示是因为在PostgreSQL中,round()函数的参数与MySQL中的round()函数略有不同。在PostgreSQL中,round()函数的第一个参数是数值类型,第二个参数是整数类型,表示要保留的小数位数。因此,在您的语句中,需要将第二个参数2改为整数类型,即2::integer。修改后的语句如下所示:
```
SELECT LEFT(jdxz, 9) AS street,
LEFT(jdxz, 6) AS qx,
'swqc' AS TYPE,
COUNT(*) AS totalnum,
ROUND(SUM(COALESCE(jzmj, 0))/10000, 2)::numeric AS totalarea,
NOW() AS updatedate
FROM swqc_house_base_info
WHERE jdxz IS NOT NULL
AND deletemark = '0'
AND (yhwt = '1' OR wfjs = '1' OR wfwgsp = '1')
GROUP BY jdxz;
```
在这个修改后的语句中,将ROUND函数中的第二个参数2改为了2::integer,同时使用了::numeric类型转换,将结果转换为numeric类型,以保证计算结果的精度和类型。
相关问题
round(COALESCE(sum(fpd1_pri),0)/nullif(sum(fpd1_pri_fm),0),3) ERROR: function round(double precision, integer) does not exist 如何修改代码
在 SQL 中,`round()` 函数用于对数值进行四舍五入操作。错误信息表明你尝试使用 `round()` 函数对两个字段进行操作,但是根据错误消息,`round()` 函数期望的第一个参数是 `double precision` 类型,而第二个参数是 `integer` 类型。问题在于你提供给 `round()` 函数的参数类型可能与函数定义不匹配。
不过,你提供的代码片段 `round(COALESCE(sum(fpd1_pri),0)/nullif(sum(fpd1_pri_fm),0),3)` 实际上并没有直接调用 `round()` 函数,因为 `COALESCE()` 和 `nullif()` 函数的输出可能已经是 `double precision` 类型,所以错误可能是由于上下文或者其他代码部分导致的。但是,如果你确信你的 `sum()` 函数返回的是正确的类型,且你只是想要修正这部分代码,那么可以尝试将 `round()` 函数的调用与 `sum()` 函数调用分开。
下面是修改后的代码示例,确保 `round()` 函数的参数类型正确:
```sql
SELECT
round(
COALESCE(sum(fpd1_pri),0) / NULLIF(sum(fpd1_pri_fm), 0)
, 3) AS rounded_result
FROM
your_table_name;
```
这里使用了 `NULLIF()` 函数来避免除以零的情况,如果 `sum(fpd1_pri_fm)` 为零,则 `NULLIF()` 函数将返回 `NULL`,而 `COALESCE()` 函数会处理这个 `NULL` 值,确保除法操作中分母不为零。
错误: COALESCE 的类型 character varying 和 integer 不匹配
这个错误提示是因为 COALESCE 函数的参数类型不匹配,它要求所有参数的类型必须一致。在这个例子中,COALESCE 函数的参数包含一个 character varying 类型的参数和一个 integer 类型的参数,因此出现了类型不匹配的错误。要解决这个问题,需要将参数类型转换为一致的类型,或者使用其他函数来处理这个问题。
阅读全文