by

SQL case when 语句解析

▼魔方 西西 提交于 2020-04-07 07:00:42
一,原始单表(也是从其他博客看到)及其查询后效果。 原始表: 查询后(要求查询后按照洲统计人口): 二,SQL探讨 *初始化insert语如下: INSERT INTO cptable VALUES (NULL ,'中国',600); INSERT INTO cptable VALUES (NULL ,'美国',100); INSERT INTO cptable VALUES (NULL ,'加拿大',100); INSERT INTO cptable VALUES (NULL ,'英国',200); INSERT INTO cptable VALUES (NULL ,'法国',300); INSERT INTO cptable VALUES (NULL ,'日本',250); INSERT INTO cptable VALUES (NULL ,'德国',200); INSERT INTO cptable VALUES (NULL ,'墨西哥',50); INSERT INTO cptable VALUES (NULL ,'印度',250); *SQL查询语句 表达方式A: SELECT SUM(population), CASE country WHEN '中国' THEN '亚洲' WHEN '印度' THEN '亚洲' WHEN '日本' THEN '亚洲' WHEN '美国

Oracle高级查询之OVER (PARTITION BY ..)

梦想与她 提交于 2020-02-29 22:08:05
为了方便大家学习和测试,所有的例子都是在Oracle自带用户Scott下建立的。 注:标题中的红色order by是说明在使用该方法的时候必须要带上order by。 一、rank()/dense_rank() over(partition by ... order by ... ) 现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句: [sql] view plain copy print ? select e.ename, e.job, e.sal, e.deptno from scott.emp e, ( select e.deptno, max (e.sal) sal from scott.emp e group by e.deptno) me where e.deptno = me.deptno and e.sal = me.sal; select e.ename, e.job, e.sal, e.deptno from scott.emp e, (select e.deptno, max(e.sal) sal from scott.emp e group by e.deptno) me where e.deptno = me.deptno and e.sal = me.sal; 在满足客户需求的同时

[git] warning: LF will be replaced by CRLF | fatal

浪子不回头ぞ 提交于 2019-12-20 22:38:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 遇到这两个错误, 基本上都是叫你将 autocrlf 设置为 false. 但是我觉得这样很不妥。 如果你的源文件中是换行符是LF,而autocrlf=true, 此时git add就会遇到 fatal: LF would be replaced by CRLF 的错误。有两个解决办法: 1. 将你的源文件中的LF转为CRLF即可【推荐】 2. 将autocrlf 设置为 false 如果你的源文件中是换行符是CRLF,而autocrlf=input, 此时git add也会遇到 fatal: CRLF would be replaced by LF 的错误。有两个解决办法: 1. 将你源文件中的CRLF转为LF【推荐】 2. 将autocrlf 设置为true 或者 false 我的建议:在Mac上设置 autocrlf = input, 在Windows上设置autocrlf = true(默认值)。 ---------------------------------------------------------------------------------------------------------------------------------- 这样的话, Windows:(true) 提交时

Connection reset原因分析和解决方案

馋奶兔 提交于 2019-12-10 19:54:09
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在使用HttpClient调用后台resetful服务时, “Connection reset”是一个比较常见的问题,有同学跟我私信说被这个问题困扰很久了,今天就来分析下,希望能帮到大家。例如我们线上的网关日志就会抛该错误: 从日志中可以看到是Socket套接字在read数据时抛出了该错误。 导致“Connection reset”的原因是服务器端因为某种原因关闭了Connection,而客户端依然在读写数据,此时服务器会返回复位标志“RST”,然后此时客户端就会提示“java.net.SocketException: Connection reset”。 可能有同学对复位标志“RST”还不太了解,这里简单解释一下: TCP建立连接时需要三次握手,在释放连接需要四次挥手;例如三次握手的过程如下: 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认; 第二次握手:服务器收到syn包,并会确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED

mysql group by 分组查询

…衆ロ難τιáo~ 提交于 2019-12-10 08:59:11
请看下表: 问题: 把 统计时间(statistic)相同 的,服务域(service_domain_moid) a中的hd100的数量的和与hd100s的数量的和计算出来。 使用方法: group by 首先,我们把service_domain_moid为a的筛选出来,如下: select * from statistic where service_domain_moid="a"; 其次: 我们把统计时间(statistic_time)相同的分组,求和 select sum(hd100), sum(hd100s) from statistic where service_domain_moid="a" group by statistic_time; 最后,把统计结果按降序排序: select sum(hd100), sum(hd100s), statistic_time from statistic where service_domain_moid="a" group by statistic_time order by statistic_time desc; 对查询结果排序 : 从表中查询出来的数据可能是无序的,或者其排列顺序不是用户所期望的顺序。为了使查询结果的顺序能满足用户的需求,可以使用 ORDER BY 关键字对记录进行排序。其语法规则如下: ORDER BY

mysql基础知识理解和sql题讲解分析面试实战(一)之groupBy&&having

旧巷老猫 提交于 2019-12-10 03:19:21
mysql 之groupBy&&having 的使用 groupby和having在什么情况下使用 使用时需要注意什么 groupby和having在什么情况下使用 问题 :根据平均值分析表 demo :原始表 结果表:根据每位user的rate的平均值更新rate, rate = rate - avg(rate) 实现步骤 step 1 创建表 -若你是想做大数据,一定要控制表字段的大小,字段最好不要为空,为空会导致索引失败 CREATE table userRate( id int(2) NOT null auto_increment, user int(2) not null DEFAULT 0, rate int(2) not null DEFAULT 0, PRIMARY KEY(id) ) step2 插入数据- 注意插入的时候因id是自增长的,所以不用,但是在表后面需填写你要插入的字段名 INSERT into userRate(user,rate) VALUES(1,1),(1,3),(1,2),(2,4),(2,4),(2,5),(2,3); step3 执行sql更新查询 update userRate JOIN (SELECT id,USER,AVG(rate) AS avr from userRate GROUP BY user HAVING user=

mysql 优化order by

扶醉桌前 提交于 2019-12-09 18:59:36
MySQL 中有两种排序方式: 1. 通过有序索引扫描直接返回有序数据 ,这种方式在使用explain分析查询的时候显示为using index, 不需要额外的排序,操作效率较高。 mysql> explain select start_time from warning_repaired order by start_time desc\G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: warning_repaired type: index possible_keys: NULL key: start_time key_len: 5 ref: NULL rows: 499471 Extra: Using index 1 row in set (0.00 sec) 2. 通过对返回数据进行排序,也就是通常所说的filesort排序 ,所有不是通过索引直接返回排序结果的排序 都叫filesort排序。 filesort并不代表通过磁盘文件进行排序,而只是进行了一个排序操作,至于排序操作 是否使用了磁盘文件或者临时表等,则取决于MySQL服务器对排序参数的设置和需要排序数据的大小。 mysql> explain select * from

Servlet HTTP method GET is not supported HTTP 405

谁都会走 提交于 2019-12-05 08:33:36
写好一个Servlet后访问时抛出"HTTP method GET is not supported by this URL"的错误,先是自己找了一下原因,后又在网络查找相关的原因后找到解决方案。 问题的原因是用Eclipse生成Servlet时,会在doGet和doPost自动添加默认调用父类的构造方法,如下红色标识代码: /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request,

MySQL如何利用索引优化ORDER BY排序语句

随声附和 提交于 2019-11-28 17:08:40
1.MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度。MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作。 通过索引优化来实现MySQL的ORDER BY语句优化 : 1、ORDER BY的索引优化。如果一个SQL语句形如: SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort]; 在[sort]这个栏位上建立索引就可以实现利用索引进行order by 优化。 2、WHERE + ORDER BY的索引优化,形如: SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort]; 建立一个联合索引(columnX,sort)来实现order by 优化。 注意:如果columnX对应多个值,如下面语句就无法利用索引来实现order by的优化 SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort]; 3、WHERE+ 多个字段ORDER BY SELECT * FROM [table]

mysql索引的要点分析

北慕城南 提交于 2019-11-28 14:56:11
mysql的索引并不是很好总结,所以日常工作中大家应该多使用 explain 来优化自己的查询和索引,做到用最少的索引来配合最高效的查询语句完整业务需求,这里我总结一些平日里遇到的比较多变的索引问题:组合索引的设计问题, order by 如何利用索引 1、最左前缀原则 应用场景:频繁对多列进行联合检索,可做组合索引 例如我们创建了 name email nick 的组合索引 name_email_nick 要想使用此索引则必须遵循 最左前缀 原则,说的简单些就是 检索条件集 可以从左到右的优先级次序匹对 组合索引的列序 可以看出组合索引其实是为每一个子列建立的索引,然后以 seq_in_index 的位序连接在一起,当你想让自己的查询能启用此索引,则最基本的一条就是最左前缀,按位序可以依次满足,中间不存在位序间断 拿此例来说,左前缀的组合方式有(注意,这里是条件集的最终拼接结果,并不是条件位序): 1 1,2 1,2,3 而 2 3 2,3 都不满足最左前缀原则 实例: name 使用一个 name email 使用两个 name email nick 使用三个 再次强调最左前缀与检索条件的书写顺序无关,只要能满足从左开始不间断的满足组合索引的子列位序即可 如上图所示,检索条件的位序虽然与组合索引的不同,但并不影响 最左前缀