SQL 用货币求和
SQL sum money with currency
如果我想要查询显示居住在槟城的客户数量以及他们的收入总额,我应该怎么做?
SELECT COUNT(Cust_state), SUM(Cust_income)
FROM Customer
WHERE Cust_state = ‘Penang’;
这不起作用,因为 Cust_income 中的值前面有 $.
编辑:Cust_income 的数据类型是 varchar2。
如果您将值存储为 字符串,那么您应该修复数据!不要将数值存储为字符串——您始终可以添加货币以用于输出目的。
你可以这样做:
SELECT COUNT(Cust_state),
SUM(CAST(REPLACE(Cust_income, '$', '') as NUMERIC(20, 4))
FROM Customer
WHERE Cust_state = 'Penang';
使用适合收入的任何类型。
如果您将适当的格式掩码应用于 TO_NUMBER
函数,那么您可以执行以下操作(第 1 - 4 行中的示例数据;查询从第 5 行开始):
SQL> with customer (cust_id, cust_income) as
2 (select 1, '00' from dual union all
3 select 4, '00' from dual
4 )
5 select sum(to_number(cust_income, '99999999')) sum_income
6 from customer;
SUM_INCOME
----------
2600
SQL>
如果我想要查询显示居住在槟城的客户数量以及他们的收入总额,我应该怎么做?
SELECT COUNT(Cust_state), SUM(Cust_income)
FROM Customer
WHERE Cust_state = ‘Penang’;
这不起作用,因为 Cust_income 中的值前面有 $.
编辑:Cust_income 的数据类型是 varchar2。
如果您将值存储为 字符串,那么您应该修复数据!不要将数值存储为字符串——您始终可以添加货币以用于输出目的。
你可以这样做:
SELECT COUNT(Cust_state),
SUM(CAST(REPLACE(Cust_income, '$', '') as NUMERIC(20, 4))
FROM Customer
WHERE Cust_state = 'Penang';
使用适合收入的任何类型。
如果您将适当的格式掩码应用于 TO_NUMBER
函数,那么您可以执行以下操作(第 1 - 4 行中的示例数据;查询从第 5 行开始):
SQL> with customer (cust_id, cust_income) as
2 (select 1, '00' from dual union all
3 select 4, '00' from dual
4 )
5 select sum(to_number(cust_income, '99999999')) sum_income
6 from customer;
SUM_INCOME
----------
2600
SQL>