原文详解:SQL-开发随笔一(数据报表)
原文链接: http://licocom.com/archives/1075
要做为一个后端开发人员,sql是必不可少需要熟悉掌握的语言。sql随便
1、AS:select 字段 as 别名,例:select name from userTable as 名字
2、UNION:UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2
注意:
UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。
3、时间格式化
时间格式化。date_format(t.time,’%y-%m’) 格式化为 年+月
4、向前推算6个日期
t.time >=date_add( now( ), interval - 6 month) 向前推算6个月时间,一般当查询条件使用
5、if语句
例:if(expr1,expr2,expr3),如果值等于expr1,则返回数值为expr2,否则返回expr3
select if(true=‘true’,1+1,1+2)
true=‘true’, 返回—>2
true=‘false’,返回—>3
-- 数据报表开发实例
SELECT
t.*,
t.enter + t.outs AS hap
FROM
(
SELECT
t.time,
sum( IF ( t.type = 's', t.number, 0 ) ) AS enter,
sum( IF ( t.type = 'f', t.number, 0 ) ) AS outs
FROM
(-- 依照类型合并查询数据
SELECT
t.CODE,
date_format( t.time, '%y-%m' ) AS time,
t.type,
t.number
FROM
(-- 时间格式转换
SELECT
rvaud02 AS `code`,
rva06 AS time,
's' AS type,
rvb07 AS number
FROM
rva_file
LEFT JOIN rvb_file ON rva01 = rvb01 UNION ALL
SELECT
ogaud03 AS `code`,
oga02 AS time,
'f' AS type,
ogb12 AS number
FROM
oga_file
LEFT JOIN ogb_file ON oga01 = ogb01
) t -- 查出所有,出货量,收货量
WHERE
t.time >= date_add( now( ), INTERVAL - 6 MONTH )
) t -- 向前推算6个月,一般当查询条件使用
LEFT JOIN v_company v ON v.CODE = t.CODE
WHERE
v.type = 'YQ' -- 依照公司编码查询条件
GROUP BY
t.time
) t -- 依照时间分组
面向开发需求,记录学习之路。