表字段和数据如下: win, dtime'y', '1999-01-02 00:00:00'
'y', '1999-01-02 00:00:00'
'y', '1999-01-02 00:00:00'
'y', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'根据上面表的结构和内容,写一个sql语句得到下面的结果dt, lost, win'1988-12-01 00:00:00', 4, 4
'1999-01-02 00:00:00', 5, 4当时看到这个试题的时候,我的第一个概念就是分组排序,可是想想分组排序出来也不可能是3个字段,应该会需要别的东西,可是我已经很久没有写这些复杂的sql语句了,当时脑子只是会乱,可能出现的词语,联合,连接。。等等都出现了,可是就是不会写(因为是用笔书面作答),回到家里思考了以下,用了几分钟得到了结果(sql客户端工具直接调试),写完后只有一个概念他妈的还是挺复杂的,就算是一个经常使用sql人员,在现场用笔作答,也不是那么容易的,何况我们都好久没有写复杂语句了,我们容易吗,不知道那些出题的人想考察什么。处于什么目的,是不是吧所有人都考到了,就显示出他的高明,厉害了,就可以一次来说你能力不行了,你要的薪水太高了,等等我们被批的一无是处,他们却高高在上洋洋得意,要是反过来给他们去做,不知道他能不能做出来。就算做出来,在实际工作中能起到多大作用这样的考察又有多大意义呢?以下是我写的sqlselect * from (select dtime as dt,count(*) as lost from table1 where win='n' group by dtime)as t1 LEFT OUTER JOIN(select dtime as dt,count(*) as win from table1 where win='y' group by dtime)as t2 on t1.dt= t2.dt;我想肯定有比我的更简单风好的语句,喜欢的话可以贴出来。共同学习
'y', '1999-01-02 00:00:00'
'y', '1999-01-02 00:00:00'
'y', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'n', '1999-01-02 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'y', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'
'n', '1988-12-01 00:00:00'根据上面表的结构和内容,写一个sql语句得到下面的结果dt, lost, win'1988-12-01 00:00:00', 4, 4
'1999-01-02 00:00:00', 5, 4当时看到这个试题的时候,我的第一个概念就是分组排序,可是想想分组排序出来也不可能是3个字段,应该会需要别的东西,可是我已经很久没有写这些复杂的sql语句了,当时脑子只是会乱,可能出现的词语,联合,连接。。等等都出现了,可是就是不会写(因为是用笔书面作答),回到家里思考了以下,用了几分钟得到了结果(sql客户端工具直接调试),写完后只有一个概念他妈的还是挺复杂的,就算是一个经常使用sql人员,在现场用笔作答,也不是那么容易的,何况我们都好久没有写复杂语句了,我们容易吗,不知道那些出题的人想考察什么。处于什么目的,是不是吧所有人都考到了,就显示出他的高明,厉害了,就可以一次来说你能力不行了,你要的薪水太高了,等等我们被批的一无是处,他们却高高在上洋洋得意,要是反过来给他们去做,不知道他能不能做出来。就算做出来,在实际工作中能起到多大作用这样的考察又有多大意义呢?以下是我写的sqlselect * from (select dtime as dt,count(*) as lost from table1 where win='n' group by dtime)as t1 LEFT OUTER JOIN(select dtime as dt,count(*) as win from table1 where win='y' group by dtime)as t2 on t1.dt= t2.dt;我想肯定有比我的更简单风好的语句,喜欢的话可以贴出来。共同学习
group by dtime
select dtime, sum(decode(win,'n',1,0)) lost, sum(decode(win,'y',1,0)) win from table1
select dtime, sum_n_y(win) win from table1 group by dtime这种方法可以处理更为复杂的情况。
select dtime ,sum(decode(win,'y',1,0)) as lost,sum(decode(win,'n',1,0)) as win from table
group by dtime
可以改写成,就通用了
select dtime ,
sum(case when win='y' then 1 else 0 end) as lost,
sum(case when win='n' then 1 else 0 end) as win from table
group by dtime
非常感谢 HelloWorld_001 感谢各位的参与,
select dtime ,count(win)
from tabname
group by dtime
你的意思是这个吗?