2005-05-10 1 2
udate是日期,uname是胜负。
case搜索函数
SELECT udate,
SUM(case when uname='胜' then 1 else 0 end)胜,
SUM(case when uname='负' then 1 else 0 end)负 FROM no1 GROUP BY udate
简单case函数
SELECT udate,
SUM(case uname when '胜' then 1 else 0 end)胜,
SUM(case uname when '负' then 1 else 0 end)负 FROM no1 GROUP BY udate
简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制。
group by 一般与聚合函数结合使用,比如查询name字段一共有几个叫‘没毛病’的 用到count或者sum,而且它本身也包含去重功能,既然分组了,相同的肯定在一组。
表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
SELECT (CASE WHEN a>b THEN a ELSE b END),
(CASE WHEN b>c THEN b ELSE c END)
FROM no2
请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)
SELECT * FROM tb_send
WHERE datediff(date_format(SendTime,'%Y-%m-%d'),curdate())=0
datediff(a,b)返回两个参数之间天数,date_format(c,d)给c初始化定义时间格式d,
curdate()返回当前日期
及格 优秀 不及格
SELECT (CASE WHEN chinese>=80 THEN "优秀" WHEN chinese>=60 THEN "及格" ELSE "不及格" END),
(CASE WHEN math>=80 THEN "优秀" WHEN math>=60 THEN "及格" ELSE "不及格" END),
(CASE WHEN english>=80 THEN "优秀" WHEN english>=60 THEN "及格" ELSE "不及格" END)
FROM no4
有一个case问题特意留到这道题来说,
case when then else end SQL语句相当于if(){} else{} ,when条件判断,如果条件成立直接返回结果,比如上题 :
如果你就想让60分及格先判断(chinese>=60),80后判断,那就得让60判断条件写成
60<=chinese<80 ---->when 60<=chinese<80 then....
想SQL语句首先要明白数学原理,这样就事半功倍了。
salary=上面的+本身
上面的怎么拿 :t2.year当前Year , t1<=t2。
SELECT t2.`Year`,SUM(t1.Salary)
FROM no5 t1,no5 t2 WHERE t1.`Year`<=t2.`Year`
GROUP BY t2.`Year`
SELECT DISTINCT `name` FROM no6 GROUP BY `name` HAVING MIN(fenshu>=80)
DISTINCT去重
删除除了自动编号不同,其他都相同的学生冗余信息
delete no7 where uid not in(select min(uid) from no7group by xuehao,uname,kebian,kecheng,fenshu)
in 表示集合是否存在 而exists 表示后面查询结果是否存在 那么not就是他们的反
on是起连接作用,与join连用。
1992 2.1 2.2 2.3 2.4
select `year`,
max(case month when 1 then amount else 0 end) as 'm1' ,
max(case month when 2 then amount else 0 end) as 'm2' ,
max(case month when 3 then amount else 0 end) as 'm3' ,
max(case month when 4 then amount else 0 end) as 'm4'
from no8 group by `year`
普通查询给内存压力,case查询给CPU压力,两者差别不大。
以上所述,有什么不同的建议可以私信联系,谢谢大家。