SQL练习问题汇总_及时更新

一.字段截取函数

right/mid/left(字段,截取长度)

二.时间相关函数

day/month/year(字段) 截取时间字段中的日期/月份/年份

select  date, count(device_id) as day1
from question_practice_detail
group by date

select DATE_ADD(date,INTERVAL 1 DAY) as day2, count(device_id) as day1
from question_practice_detail
group by day2 

三.截取函数

SUBSTRING_INDEX(s, delimiter, number) 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。

如果 number 是正数,返回第 number 个字符左边的字符串。从左数的第n个

如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。---从右边数的第n个

substr 截取字符串 n位置开始的m长度

四.where

where中的字段必须严格来自于from后表中的字段

聚合语句(sum,min,max,avg,count)要比having子句优先执行,所有having后面可以使用聚合函数。而where子句在查询过程中执行优先级别优先于聚合语句(sum,min,max,avg,count),所有where条件中不能使用聚合函数。

五.统计

数量----count

按条件统计数量 sum(if(xxx,1,0))

算比例: count1/count2.        avg(sum(if ,1,0))

select device_id,university,sum(if(question_id is null,0,1)),sum(if(result='right',1,0))
from 
(select up.device_id,up.university,qpd.question_id,qpd.result
from user_profile as up
left join question_practice_detail as qpd
on up.device_id=qpd.device_id
where up.university='复旦大学')t0

select up.device_id,up.university,qpd.question_id,qpd.result
from user_profile as up
left join question_practice_detail as qpd
on up.device_id=qpd.device_id
where up.university='复旦大学'

select device_id,university,sum(if(time=1,1,0)),sum(if((time=1 and result='right'),1,0))
from 
(select up.device_id,up.university,qpd.question_id,qpd.result,if(month(date)=8,1,0) as time
from user_profile as up
left join question_practice_detail as qpd
on up.device_id=qpd.device_id
where up.university='复旦大学')t0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值