【SQL】SQL语句积累

SQL函数

1.CONCAT()函数:用于拼接需要输出结果(注意中文需要用’'包住)

例:结果集中,name=胡聪 age=23 性别=男,想要输出diy字段

SELECT su.name ,su.age ,su.sex , CONCAT('姓名', su.name,'年龄',su.age, '性别',su.sex) AS memo
FROM sys_user

输出:

nameagesexmemo
胡聪23姓名胡聪年龄23性别男

2.ROUND()函数:用于把数值字段舍入为指定的小数位数

SQL ROUND() 语法:SELECT ROUND(column_name,decimals) FROM table_name
column_name:需要四舍五入的字段名 decimals:保留的小数位数

实际案例

1.通过SQL计算出某列数据所占总和百分比

需求:需要统计指定时间内,榜单材料的重量占比,并按高低进行排序
思路:按材料名称进行分组,统计出每种材料的总重量,再除以材料总的重量
SQL:子查询作为结果、ROUND()函数、分组GROUP BY、排序ORDER BY、字符串拼接CONCAT()

SQL语句:

SELECT
	a.materialDetailName,
	a.realWeight,
	CONCAT( ROUND( a.realWeight / b.totalRealWeight * 100, 2 ), '', '%' ) AS percent 
FROM
	(
SELECT
	bbd.material_name AS materialDetailName,
	IFNULL( sum( bbd.real_weight ), 0 ) AS realWeight 
FROM
	bi_bill_detail bbd
	LEFT JOIN bi_bill bb ON bb.id = bbd.bill_id 
WHERE
	1 = 1 
	AND bb.del_flag = 0 
	AND bbd.material_name IS NOT NULL 
	AND bb.office_id IN ( 033 ) 
	AND bb.in_date >= '2020-01-01 00:00:00' 
	AND bb.in_date <= '2020-12-31 23:59:59' 
GROUP BY
	bbd.material_name 
ORDER BY
	realWeight DESC 
	) AS a,
	(
SELECT
	IFNULL( sum( bbd.real_weight ), 0 ) AS totalRealWeight 
FROM
	bi_bill_detail bbd
	LEFT JOIN bi_bill bb ON bb.id = bbd.bill_id 
WHERE
	1 = 1 
	AND bb.del_flag = 0 
	AND bbd.material_name IS NOT NULL 
	AND bb.office_id IN ( 033 ) 
	AND bb.in_date >= '2020-01-01 00:00:00' 
	AND bb.in_date <= '2020-12-31 23:59:59' 
	) AS b

输出:

materialDetailNamerealWeightpercent
道砟1380.91132.89%
机制砂1062.6425.31%
碎石1010.37524.06%
AB料485.2411.56%
水泥208.064.95%
钢绞线32.020.76%
柴油19.860.47%

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值