• [转载]查询之order by,group by和having的使用(三)


    六、例子

    1> select * from bank_info
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        


     

    (2 rows affected)
    1> select * from bank_info where acctround='1' group by bankno order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        


     

    (2 rows affected)
    1> select * from bank_info where acctround='1' order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        


     

    (1 row affected)
    1> select * from bank_info
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2        

    (2 rows affected)
    1> select * from bank_info where acctround='1' group by bankno,acctround order by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        


    (1 row affected)

    group by bankno,acctround
    的意思是找出bankno,acctround两列完全相同的不同行作为一组.那上面的数据就分成两组了,因为acctround不同,而结果需要acctround='1'的组.所以只有一行结果.如果是group by bankno,那么两行会合成一行.它并没有先通过where分析出只有一行符合结果集,group就只有一行结果了.这里的问题是wheregroup谁先谁后分析的问题?在这个问题的上下文中,本来的group by bankno就没有任何意义.其实是这样的:

    或者是:

    select bankno,sum(money) from bankdiff group by bankno;

    又或者是:

    select bankno,acctround,sum(money) from bankdiff where acctround='1' group by bankno,acctround;

    不可能指定acctround又不把它放在groub by中的.

    1> select * from bank_info group by bankno
    2> go
     bankno acctround
     ------ ---------
     123456 1        
     123456 2

    可见这个group by没有意义.因为它有select *,而acctround不一样,就不能只显示一行出来.把select *改成select bankno就只有一行结果了.

  • 相关阅读:
    动态传参
    函数的介绍
    文件的操作
    send email with formatted table
    minimize and close window with customed winform
    python algorithm
    something important about docker
    book list
    which language is suitable for what to do
    Find Duplicate Items in list fast
  • 原文地址:https://www.cnblogs.com/liuzhuqing/p/7480912.html
Copyright © 2020-2023  润新知