sql_计算字段

1.拼接字段

1.1 拼接实践

例如:Vendor表中包含供应商名和国家信息,现在需要生成一个供应商报表,需要在格式化的名称中,不仅列出供应商名还要有地址

create table vendors (
 vend_name varchar(24),
 vend_country varchar(24)
)

insert into vendors values ('Microsoft Corporation','USA');
insert into vendors values ('Alibaba Group','CHINA');

此报表需要一个值,不仅列出name还要用括号将country括起来,我们如何创建这个组合值?

拼接:将多个值拼结到一起,构成单个值

Access和SQL Server中使用+号,DB2,Oracle,PostgreSQL等使用||,而MySQL和MariaDB时要使用特殊函数

SELECT vend_name + '(' + vend_country + ')' 
FROM Vendors;
SELECT vend_name || ' (' || vend_country || ')' as name_country
FROM Vendors;
SELECT Concat(vend_name, ' (', vend_country, ')')
FROM Vendors;

结果为: 

拼接的一方必须是字符串类型,可以简单理解为字符串的拼接

在某些数据库中,返回的值会保存填充为列宽的文本值,而实际上你并不需要这些空格

--------------------------------------------------
Microsoft Corporation                 (USA     )
Alibaba Group                          (CHINA   )

此时使用sql中的RTRIM()函数可以解决这个问题,RTRIM()函数去掉值右边的所有空格,对列进行跟进处理

大多数DBMS都支持RTRIM(),他去除字符串右边的空格

LTRIM()去掉字符串左边的空格

TRIM()去掉两端的空格

1.2 别名 

拼接的新字段,并没有名称,只是一个值,并不能实际应用于客户端应用中。此时我们需要使用别名

别名是一个字段或值的替换名,别名关键词as,如下

SELECT vend_name || ' (' || vend_country || ')' as name_country
FROM Vendors;

 

2.执行算术计算

create table Orders(
   prod_id varchar(24),
   quantity number,
   item_price number
)

insert into Orders values ('RGAN01',5,4.9900);
insert into Orders values ('BR03',5,11.9900);
insert into Orders values ('BNG01',10,3.4900);

此时,我们要汇总每个物品的价格(单价*数量)

SELECT prod_id, 
       quantity,
       item_price,
       quantity * item_price as expanded_price
 FROM Orders;

结果为:

操作运算符:

+
-
*
/

 

### 如何在SQL中对某列进行字段计算SQL 中,可以通过 `SELECT` 语句中的表达式来实现对某一列的计算操作。这种通过表达式动态生成的结果被称为 **计算字段** 或者 **派生字段**。 #### 使用算术运算符 可以利用基本的算术运算符(如加法、减法、乘法和除法)来进行简单的数值计算。例如,在引用中提到的一个例子是基于两列之间的乘积创建一个新的计算字段[^2]: ```sql SELECT quantity, item_price, (quantity * item_price) AS expanded_price FROM products; ``` 上述查询将返回三列:原始的 `quantity` 和 `item_price` 列以及新生成的名为 `expanded_price` 的计算字段,该字段表示每种商品扩展后的价格。 #### 对单个字段执行复杂逻辑处理 如果目标是对单一字段应用更复杂的转换或函数,则可采用内置函数或者自定义表达式完成任务。比如下面的例子展示了如何基于现有字段的比例关系构建新的比例字段[^3]: ```sql -- 假设有一个表记录不同类型房屋的数量及其总数量 WITH house_counts AS ( SELECT wy_type, COUNT(house_id) AS counts FROM p_building_house WHERE proj_id = 1 GROUP BY wy_type ), total_count AS ( SELECT COUNT(*) AS sums FROM p_building_house WHERE proj_id = 1 ) SELECT hc.wy_type, hc.counts, tc.sums, ROUND(CONVERT(DECIMAL(18, 2), hc.counts) / tc.sums * 100, 4) AS proportion FROM house_counts hc, total_count tc; ``` 这里我们不仅实现了按类型统计房屋数目的功能,还进一步得出了各类型的房屋占总体的比例情况。 #### 多列求和场景下的解决方案 当涉及到同一行内的多个不同字段值相加的情况时,可以直接把这些字段名写入到 SUM 函数内部并加上必要的括号包裹起来形成整体作为参数传递给聚合函数调用即可[^4] : ```sql SELECT sum([列1]+[列2]+[列3]) as 总计金额 FROM 表名; ``` 注意这里的语法适用于支持标准ANSI-SQL方言的关系型数据库管理系统(RDBMS),像Microsoft SQL Server 就完全兼容此类书写方式;而对于其他品牌的产品可能需要调整相应的关键字拼接形式才能正常工作。 综上所述,无论是简单还是复杂的业务需求都可以借助灵活运用各种工具手段达成预期效果——即通过对已有数据资源实施合理有效的加工变换从而获取更有价值的信息成果!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值