mysql
1. substring_index(str,delim,count)
str 表示要处理的字符串
delim 表示分隔符
count 计数
select substring_index(us.profile,',',-1) as gender,
count(*) as number
from user_submit us
group by gender;
比较count(*)和count(字段名)的区别:
前者对行的数目进行计算,包含null,
后者对特定的列的值具有的行数进行计算,不包含null,得到的结果将是除去值为null和重复数据后的结果。
2.
select difficult_level,
(sum(case when qpd.result = right then 1 else 0 end)/count(u.answer_cnt)) as correct_rate
from user_profile u inner join question_practice_detail qpd on u.device_id = qpd.device_id
inner join question_detail qd on qd.question_id = qpd.question_id
where university = 浙江大学
group by difficult_level
order by correct_rate;
(sum(case when qpd.result = right then 1 else 0 end)/count(u.answer_cnt)) as correct_rate 正确率 = 正确的个数/总答题个数
sum(case when qpd.result = right then 1 else 0 end) sum表示计算和 当result=right时为1 否则为0
user_profile u inner join question_practice_detail qpd on u.device_id = qpd.device_id inner join question_detail qd on qd.question_id = qpd.question_id 三张表之间连接inner join
3.
select device_id,gpa,age
from user_profile
order by gpa ,age
先按照业绩进行升序排序,再按照年龄进行升序排序
select device_id,gpa,age
from user_profile
order by gpa desc,age desc
先按照业绩进行降序排序,再按照年龄进行降序排序
4.
CASE 测试表达式
WHEN 简单表达式1 THEN 结果表达式1
WHEN 简单表达式2 THEN 结果表达式2 …
WHEN 简单表达式n THEN 结果表达式n
[ ELSE 结果表达式n+1 ]
END
select (case when age >= 25 then 25岁及以上 else 25岁以下 end) as age_cnt, 当年龄大于25等于25时,显示为25岁及以上,否则显 示为25岁以下
count(*) as number
from user_profile
group by age_cnt
5. mysql语句的优先级
首先要选定需要操作的表 from / jion on / inner join
确定操作过滤的条件 where/ and /or
以何种方式展示数据 group by / having
确定操作方式 select
确定展示顺序 order by
截取展示 limit
6. 表之间的连接
1. Inner Join
SELECT * FROM a INNER JOIN b ON a.`name` = b.`name` 显示结果为a表和b表的交集部分:
2. LEFT OUTER JOIN
SELECT * FROM a LEFT OUTER JOIN b ON a.`name` = b.`name`显示结果为a的全部值,b表中匹配的则显示不匹配的则显示null:
3.
RIGHT OUTER JOIN
SELECT * FROM a RIGHT OUTER JOIN b ON a.`name` = b.`name`显示结果为b的全部值,a表中匹配的则显示不匹配的则显示null:
4.
UNION
注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。
同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。
SELECT name FROM a UNION SELECT name FROM b显示a表和b表中所有内容,相同内容只显示一次:
5.
UNION ALL
SELECT name FROM a UNION ALL SELECT name FROM b显示a表和b表中所有内容: