表字段和数据如下: 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;我想肯定有比我的更简单风好的语句,喜欢的话可以贴出来。共同学习

解决方案 »

  1.   

    select dtime ,sum(decode(win,'y',1,0)) as lost,sum(decode(win,'n',1,0))  as win from table 
    group by dtime 
      

  2.   

    考熟练度和临场能力吧
    select dtime, sum(decode(win,'n',1,0)) lost, sum(decode(win,'y',1,0)) win from table1
      

  3.   

    可以重写sum函数,sum_n_y() ,实现判断胜负。
    select dtime, sum_n_y(win) win from table1 group by dtime这种方法可以处理更为复杂的情况。
      

  4.   

    谢谢各位热情支持,decode好象是oracle中的函数,我对oracle不是很熟悉,如果用mysql或者mssql有什么更好的吗?
      

  5.   

    decode 是oracle的函数,可以用通用的case when then代替,就是这样写sql变长了
    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 
      

  6.   


    非常感谢 HelloWorld_001 感谢各位的参与,
      

  7.   

     win,     dtime 
    select dtime  ,count(win)
    from tabname
    group by dtime 
     你的意思是这个吗?
      

  8.   

    HelloWorld_001  6楼的是正确答案,简单明了。还有没有 给出新的答案