一、
(行遍历问题,面试)一道SQL语句面试题,关于group by
表内容:bs
bsrq res
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
二、查询
1、select case when condition then result [when....][else result] end。
case子句可以用于任何表达式可以有效存在的地方。condition是一个返回boolean的表达式。如果结果为真,那么case表达式的结果就是符合条件的result;如果结果为假,那么以相同方式搜寻任何随后的when子句。如果没有when condition为真,那么case表达式的结果就是在else子句里的值。如果省略了else子句而且没有匹配的条件,结果为null。
select bsrq,'胜'=sum(case when res='胜' then 1 else 0 end),
'负'=sum(case when res='负' then 1 else 0 end)
from bs group by bsrq
2、这个简单的case表达式是上面的通用形式的一个特殊的变种。
case expression when value then result [when] [else result] end
先计算expression的值,然后与所有在when子句里声明的value对比,直到找到一个相等的。如果没有找到匹配的,则返回在else子句里的result(或者null)。
select bsrq,'胜'=sum(case res when '胜' then 1 else 0 end),
'负'=sum(case res when '负' then 1 else 0 end)
from bs group by bsrq