中邮信科部分工作笔记(sql语句-jsp等)

	https://blog.csdn.net/weixin_44137201/article/details/108579781     Spring MVC中@ModelAttribute注解在参数上的使用
	
	https://blog.csdn.net/agonie201218/article/details/45439719     eclipse生成getset快捷键
	
	https://blog.csdn.net/foamflower/article/details/5713604		StringUtils中 isNotEmpty 和isNotBlank的区别 判断不为空,isNotBlank()严格写
	
	薛坤代码模板  public class UrsPcsProvinceInletBypassDao extends JdptDao implements IUrsPcsProvinceInletBypassDao {
	
	https://blog.csdn.net/hehuihh/article/details/79033047   substring常用的两种方法 截取字符串,含头不含尾 "abcde".substring(1,3);>"bc"
	
	https://www.runoob.com/java/java-string-charat.html			Java charAt()  "abaa".charAt(1) > "b";方法  返回索引位置字符
	
	https://www.cnblogs.com/ls-pankong/p/9697425.html				Long.parseLong方法
	
	ait +shilt s c/o								eclipse中生成getset方法
	
	需要在SVC和web中的hsf 中添加服务(文件名必须小写)
	
	行列转换  https://blog.csdn.net/lch_2016/article/details/81947448
	
	sql语句:case when:如果就; 有多个条件判断时,当一个条件满足就不再向下判断了,直接结束;
	例子:
		样式:
		CASE 
		WHEN 条件判断1  THEN  赋值
		WHEN 条件判断2  THEN  赋值
		.....
		ELSE  赋值
		END                        // 注:else根据需要添加.
		
		实例:select name ,case when money>20000 then '有钱' when money>10000 then '还可以' else '穷' 
		end  as '自己起的别名' from employee_final;
		表结构和结果在csdn上;
	
	mysql建表:
	CREATE TABLE `urs_pcs_province_inlet_bypass_d_ads` (
		`province_code` varchar(存储字段可能的最大长度) COMMENT '操作省份代码',
		`statistics_date` BIGINT COMMENT '统计时间'
	)	
		COMMENT 建表时加的注释,在表结构里可以查看
		varchar 可变字符类型 使用时要设置长度
		
	https://blog.csdn.net/junhongzhang/article/details/90746217	  sql执行顺序
	
	聚合函数与分组 一起使用 
	聚合函数是对一列数据进行计算,是对分组后的 数据组 进行的计算
	分组是对 where 条件 查询后得到的数据进行的分组,每组有多个数据行时只会取第一个数据进行展示
	排序是对 查询得到的数据进行排列,不会改变数据,只改变展示数据顺序
	case when 是对得到的每行数据进行一个操作,进行行列转换, 得到一个新的 列出来,可以和聚合函数一起使用,
	
	https://blog.csdn.net/weixin_42586373/article/details/107331466  case when的  使用
	
	https://www.cnblogs.com/lwhkdash/archive/2012/06/26/2562979.html    pivot的使用行列转换
	
	having 对分组后的数据进行 筛选 
	
	left  join  左连接查询 必须指定每个表的别名,where条件指定 别名.条件
	left join 左连接查询就是 根据 两张表 进行一个 连接查询 
	取别名 1. as 别名 2.空格 别名	
	在建立的dto 与表对应,主要用来接收查询出的结果; 再根据需要设置多余的 字段
	————————————————
	
	新:
	//1.得到统计维度 的进出口邮件量
	select a.省份,a.地市,a.机构,a.机构代码, a.sum(case when 条件  then 结果 else 0 end) as别名(进口分流量) ,a.'....(出口分流量)',
	b.进口总量,b.出口总量 
	from 日报表 as 别名(分流量表a) 
	left join(
		select 省份, sum(case when 条件  then 结果 else 0 end)as 别名(进口总量) , sum() as 别名(出口总量)   
		from 日报表 where 省份 and 时间 group by 省份,进出口 ) as 别名(总量表b) on 分流量表.省份=总量表.省份 
	where 统计维度and 省份and 邮件种类and 时间 
	group by 省份,地市,机构,机构代码 
	
	//薛坤 
	select  省份, 地市, 机构, 机构代码 , 
	sum(case when 条件  then 结果 else 0 end)as 别名(进口分流量),
	sum(case when 条件  then 结果 else 0 end)as 别名(出口分流量),
	sum(case when 条件  then 结果 else 0 end)as 别名(出口总量),
	sum(case when 条件  then 结果 else 0 end)as 别名(出口总量),
	from 日报 
	where 省份and邮件种类and时间 
	group by 省份                                            地市 机构 机构代码 
	having 进/出口分流量!=0
	
	a省分 地市  机构 机构代码  非省会 	出口分流量 进口分流量 总量
	
	b省份 地市 a机构 机构代码  非省会  出口分流量 进口分流量 总量
	b省份 地市 b机构 机构代码   		出口分流量 进口分流量 总量
	b省份 地市 c机构 机构代码  			出口分流量 进口分流量 总量
	
	//2.得到进出口邮件总量
	和上面相同的查 只是去掉统计维度(非省会地市级机构标识)条件,得到相同省份.....的分组,有进口一行,出口一行,再想办法把上下两条语句 中 的进口出口量在一条数据里显示; 得到进口/出口的总邮件量;
	
	//3. left join 再把两条数据合并成一条 
	
	———————————————— 
	
	数据库链接
	#ads-jd-d-urs-pcs
	adsUrsPcs.driver=com.mysql.jdbc.Driver
	adsUrsPcs.url=jdbc:mysql://ads-jd-d-urs-pcs-5d467d9f-vpc.cn-beijing-zgyzkfy-am20001-a.res.devcloud.cpct.cn:10001/ads_jd_d_urs_pcs?useUnicode=true&characterEncoding=utf-8&rewriteBatchedStatements=true
	adsUrsPcs.username=h8ICzha03TG0wJ3w
	adsUrsPcs.secpwd=I1qbADrvC2pjvThuYmmPYQUjwKDw7o
	————————————————
	B站jsp,jstl,el课程
	JSP指令: 用于配置jsp页面,导入资源文件;
	格式:<%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
	指令分类:
	1,page 配置jsp页面的,属性有
	   *contentType可以设置字符集和编码,
	   *import:导包, 导入java代码的某些包
	   * errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
	2,include 页面包含的。导入页面的资源文件(例:导入写好的top.jsp文件到当前页面) <%@include file="top.jsp"%>
	3,taglib	: 导入资源
			* 例:导入jstl <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:前缀,自定义的 使用时就用 <前缀名:什么什么的>
	MVC 模式
	1,M 模型 model: javaBeen: 遵循特定写法的类; 完成具体的业务操作,如查询数据库,封装对象
	2,V 视图 view:  jsp 展示数据
	3,C	控制器   Controller Servlet 获取用户输入,调用模型,将数据交给视图展示
	
	为了不在jsp中写大量java代码,使用El表达式和JSTl标签代替java代码;
	--------------------------------
	jsp相关: $(document).ready(function () 页面加载完成后再执行ready(),防止页面没加载万就调用方法出现错误,https://blog.csdn.net/qq_34802511/article/details/82589487
	
	-------------------
	substring()用法
1.substring(int  indx)

  直接返回从角标为indx的字符开始一直到结尾的字符串,"abcde".substring(2) 返回的是 "cde"。

2.substring(int start,int end)

  截取角标在 [start,end) 区间的字符串,注意是左闭右开的。

  ①end大于字符串,运行异常(StringIndexOutOfBoundsException);但是可以等于,因为是左闭右开的空间,右侧值取不到

  ②start>end,运行异常(StringIndexOutOfBoundsException)

  ③start<end,一切正常>
	-----------------------------------------------
	 【Java】Calendar获取年、月、日、时间                             https://blog.csdn.net/zhufengyan521521/article/details/79976887  
	----------------------------------------
	c:set    <c:set>标签用于设置变量值和对象属性
	$("#pageNoInfo").val(0)  设置id为pageNoInfo 的value值为0
	
	varStatus="status">
	  <c:set var=>
	  循环后进行合计计算
	
	帮助页面
	结果页面
	下钻页面
	
	-----------------------------------------------
	
SELECT
	a.province_code,
	a.province_name,
	a.city_code,
	a.city_name,
	a.org_code,
	a.org_name,
	a.ori_province_code,
	a.ori_province_name,
	a.ori_city_code,
	a.ori_city_name,
	a.ori_org_code,
	a.ori_org_name,
	a.dlv_province_code,
	a.dlv_province_name,
	a.dlv_city_code,
	a.dlv_city_name,
	a.dlv_org_code,
	a.dlv_org_name,
	a.route_code,
	a.route_name,
	a.base_product_code,
	a.base_product_name,
	a.waybill_flag,
	a.province_city_flag,
	a.statistics_date,
	SUM( CASE WHEN a.waybill_flag = 1 THEN a.waybill_num ELSE 0 END ) AS one_waybill,
	SUM( CASE WHEN a.waybill_flag = 2 THEN a.waybill_num ELSE 0 END ) AS two_waybill,
	b.one_waybillsum,
	b.two_waybillsum 
FROM
	urs_pcs_province_inlet_bypass_d a
	LEFT JOIN (
SELECT
	province_code,
	province_name,
	SUM( CASE WHEN waybill_flag = 1 THEN waybill_num ELSE 0 END ) AS one_waybillsum,
	SUM( CASE WHEN waybill_flag = 2 THEN waybill_num ELSE 0 END ) AS two_waybillsum 
FROM
	urs_pcs_province_inlet_bypass_d 
WHERE
	1 = 1 
	AND statistics_date >= '202106' 
	AND statistics_date <= '202106' 
GROUP BY
	province_code,
	province_name ,
	waybill_flag
	) AS b ON b.province_code = a.province_code 
WHERE
	1 = 1 
	AND a.province_city_flag = '1' 
	AND a.base_product_code IN ( '11210', '11312' ) 
	AND a.statistics_date >= '202106' 
	AND a.statistics_date <= '202106' 
GROUP BY
	a.province_code,
	a.province_name,
	a.city_code,
	a.city_name,
	a.org_code,
	a.org_name
	
	
	
---------------------------------------------
	${fn:substring(query.statisticsDayBegin,0,4) }年${fn:substring(query.statisticsDayBegin,5,7) }月${fn:substring(query.statisticsDayBegin,8,10) }日    -  ${fn:substring(query.statisticsDayEnd,0,4) }年${fn:substring(query.statisticsDayEnd,5,7) }月${fn:substring(query.statisticsDayEnd,8,10) }日
                      截取開始索引到結束索引的子字符串         
	
---------------------------------------------
SHOW CREATE TABLE  urs_pcs_province_inlet_bypass_m 
下面的框可以查看建表语句
---------------------------------------------	
	主体</body> 表格</table>  表格正文</tbody>
	表格分割成三个部分:题头、正文和脚注。而这三部分分别用:thead,tbody,tfoot来标注。 
thead用来放标题之类的东西 
tbody放数据本体 
tfoot放表格的脚注之类…… 
---------------------------------------------	
<fmt:formatNumbe 格式化
-----------------------------------
<th colspan:2 >    合并列     
---------------------------------------------
 <!-- 下钻查询标识,省份,时间,统计维度, 邮件种类,统计周期 --> 
	下钻标识  name="eachFlag"
	统计维度 name="statisticalMethod" 
	省份  name="provinceCode"
	邮件种类   name="webWaybillTypeCode"
	统计周期    name="cysleState"
	统计时间    name="statisticsDayBegin"   name="statisticsDayEnd"
				name="statisticsMonthBegin"  name="statisticsMonthEnd"
				name="statisticsYearBegin"   name="statisticsYearEnd"
					?eachFlag='标识'
					&statisticalMethod=${query.statisticalMethod}
					&provinceCode=${b.provinceCode}
					&webWaybillTypeCode=${query.webWaybillTypeCode}
					&cysleState=${query.cysleState}
					&statisticsDayBegin=${query.statisticsDayBegin}
					&statisticsDayEnd=${query.statisticsDayEnd}
					&statisticsMonthBegin=${query.statisticsMonthBegin}
					&statisticsMonthEnd=${query.statisticsMonthEnd}
					&statisticsYearBegin=${query.statisticsYearBegin}
					&statisticsYearEnd=${query.statisticsYearEnd}
---------------------------------------------
省市联动列表的数据来源?????/					
	
	<fmt:formatNumber value=  格式化数字显示格式   value值必须是数字
	left join on 的条件是多条时要用and链接,
		group by时 如果有多个表要在条件上跟随别名
	
	
**********************
group_concat将分组后字段合并成一个字符串返回

现在的需求就是每个id为一行 在前台每行显示该id所有分数
SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id
id   score
1		a,b,b
2     a,b,c
3      a,b,c

可以看到 根据id 分成了三行 并且分数默认用 逗号 分割 但是有每个id有重复数据 接下来去重
SELECT id,GROUP_CONCAT(DISTINCT score) FROM testgroup GROUP BY id
DISTINCT :去除重复
id   score
1		a,b,
2     a,b,c
3      a,b,c	
***************************
with as 子查询 定义一个sql片段,该片段可被本sql 中的select调用.该片段的临时表仅本次sql有效.
with A as(select * from student where id= 10 ),
 B as (select * from student where id= 10 ) 
 select A.名字,B.名字 from A,B where A.id=B.id 

二、with的相关总结
1.使用with子句可以让子查询重用相同的with查询块,通过select调用(with子句只能被select查询块引用),一般在with查询用到多次情况下。在引用的select语句之前定义,同级只能定义with关键字只能使用一次,多个用逗号分割。

2.with子句的返回结果存到用户的临时表空间中,只做一次查询,反复使用,提高效率。

3.在同级select前有多个查询定义的时候,第1个用with,后面的不用with,并且用逗号隔开。

4.最后一个with 子句与下面的查询之间不能有逗号,只通过右括号分割,with 子句的查询必须用括号括起来

5.如果定义了with子句,而在查询中不使用,那么会报ora-32035 错误:未引用在with子句中定义的查询名。(至少一个with查询的name未被引用,解决方法是移除未被引用的with查询),注意:只要后面有引用的就可以,不一定非要在主查询中引用,比如后面的with查询也引用了,也是可以的。

6.前面的with子句定义的查询在后面的with子句中可以使用。但是一个with子句内部不能嵌套with子句。

7.当一个查询块名字和一个表名或其他的对象相同时,解析器从内向外搜索,优先使用子查询块名字。

8.with查询的结果列有别名,引用的时候必须使用别名或*。  
**************************

union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复。
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION


Union All:对两个结果集进行并集操作,包括重复行,不进行排序;
如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
***************************************
CAST 函数用于将某种数据类型的表达式显式转换为另一种数据类型。CAST()函数的参数是一个表达式,它包括用AS关键字分隔的源值和目标数据类型。

语法:CAST (expression AS data_type)

expression:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
data_type:目标系统所提供的数据类型,包括bigint和sql_variant,不能使用用户定义的数据类型。

 

可以转换的类型是有限制的。这个类型可以是以下值其中的一个:

    二进制,同带binary前缀的效果 : BINARY    
    字符型,可带参数 : CHAR()     
    日期 : DATE     
    时间: TIME     
    日期时间型 : DATETIME     
    浮点数 : DECIMAL      
    整数 : SIGNED     
    无符号整数 : UNSIGNED 
************************************
内连接是最常见的一种连接,只连接匹配的行。

inner join语法

select column_name(s)
from table 1
INNER JOIN table 2
ON
table 1.column_name=table 2.column_name

注释:INNER JOIN与JOIN是相同
INNER JOIN产生的结果集中,是1和2的交集。
*************************************************
LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替。

LEFT JOIN 语法

select column_name(s)
from table 1
LEFT JOIN table 2
ON table 1.column_name=table 2.column_name

注释:在某些数据库中,LEFT JOIN 称为LEFT OUTER JOIN

LEFT JOIN产生表1的完全集,而2表中匹配的则有值,没有匹配的则以null值取代。


double类型数据精确计算使用BigDecimal,精确计算时不使用+-/*符号,改为使用方法,将double类型数据变为string后使用
https://blog.csdn.net/qq_37080455/article/details/98964856
**********************
分组后取数
group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
https://blog.csdn.net/k0307x1990y/article/details/82905084
********************************************************************
ROUND函数 用于把数值字段舍入为指定的小数位数。
SELECT ProductName, ROUND(要舍弃小数位的字段,保留几位小数(四舍五入)) as UnitPrice FROM Products

CAST函数用来类型转换
ROUND函数用来控制小数位数
***************************************************************************
coalesce 函数详解
SQL实例
select coalesce(success_cnt, 1) from tableA
当success_cnt 为null值的时候,将返回1,否则将返回success_cnt的真实值。
select coalesce(success_cnt,period,1) from tableA
当success_cnt不为null,那么无论period是否为null,都将返回success_cnt的真实值(因为success_cnt是第一个参数),当success_cnt为null,而period不为null的时候,返回period的真实值。只有当success_cnt和period均为null的时候,将返回1。
————————————————
*******************************************************************************
decode()函数,  
举例说明:

现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other;

SQL如下:

Select monthid , decode (sale,1000,'D',2000,'C',3000,'B',4000,'A',’Other’) sale from output

特殊情况:

若只与一个值进行比较

Select monthid ,decode(sale, NULL,‘---’,sale) sale from output

另:decode中可使用其他函数,如nvl函数或sign()函数等;
https://www.cnblogs.com/freespider/archive/2010/08/09/1795977.html
*****************************************************************************************
一NVL函数是一个空值转换函数   
一,如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值。 该函数的目的是把一个空值(null)转换成一个实际的值。其表达式的值可以是数字型、字符型和日期型。但是表达式1和表达式2的数据类型必须为同一个类型。

对数字型: NVL( comm,0);

对字符型 NVL( TO_CHAR(comm), 'No Commission')

对日期型 NVL(hiredate,' 31-DEC-99')

二 NVL2(表达式1,表达式2,表达式3)

如果表达式1为空,返回值为表达式3的值。如果表达式1不为空,返回值为表达式2的值。
https://www.cnblogs.com/fujian-code/p/8781091.html
**************************************************************************
sql中|| 代表连接  
**************************************************************************
ads数据库是阿里的,数据同步导入,(也可以做数据手动插入,更改为 OPTIONS(UPDATETYPE='REALTIME')就可以了  ).
 drds数据库可以做数据手动插入
********************************************************************************
Java中Collections.sort()的使用!
在日常开发中,很多时候都需要对一些数据进行排序的操作。然而那些数据一般都是放在一个集合中如:Map ,Set ,List 等集合中。他们都提共了一个排序方法 sort(),要对数据排序直接使用这个方法就行,但是要保证集合中的对象是 可比较的。

********************************************************************************
map之containsKey方法

1 map是一个key和value的键值对的集合。有key和value键值对,就会有判断是否有key。这方法就是containsKey方法。
如:if(map.containsKey("name")){
value=map.get("name").toString();
System.out.println("找到了name的值:"+value);
}
map中的containsKey(key)方法是判断该key在map中是否有key存在。如果存在则返回true。如果不存在则返回false。

********************************************************************************
java List toArray(new String[0]) 的理解

https://www.cnblogs.com/yangsanluo/p/14890111.html
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值