【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

輸出:

name age sex memo
胡聰 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

輸出:

materialDetailName realWeight percent
道砟 1380.911 32.89%
機制砂 1062.64 25.31%
碎石 1010.375 24.06%
AB料 485.24 11.56%
水泥 208.06 4.95%
鋼絞線 32.02 0.76%
柴油 19.86 0.47%

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章