1、用于去重时,必须放在所有字段前面;聚合统计时,是放聚合函数内统计字段前面,如 select count(DISTINCT ID) FROM TB
2、是其后所有字段。我是杂学杂看来的,期待楼下补充详细材料

解决方案 »

  1.   

    1、distinct必须放在所有字段开头吗

    是,必须这样做2、distinct的限定范围,是紧随其后的那个字段,还是其后所有字段。

    其后所有的字段,和 group by 的那种效果一样。只是处理方式不一样,group by 还能做其他的事。
      

  2.   


    有没有讲解的特别细致的书籍或资料,谢谢。sql server inside系列 有讲一点儿。lz可以参考看看。
    另外就是外国大牛写的一些东西。 lz google一下吧。 
      

  3.   


    有没有讲解的特别细致的书籍或资料,谢谢。
    你可以到 MSDN 上看看,那里东西很多
    http://msdn.microsoft.com/library/
      

  4.   

    http://technet.microsoft.com/en-us/library/ms176104(v=sql.110).aspx
    看一下上面的technet上的语法表达式你的问题就应该很清楚了。SELECT [ ALL | DISTINCT ]
    [ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ] 
    <select_list> 
    <select_list> ::= 
        { 
          * 
          | { table_name | view_name | table_alias }.* 
          | {
              [ { table_name | view_name | table_alias }. ]
                   { column_name | $IDENTITY | $ROWGUID } 
              | udt_column_name [ { . | :: } { { property_name | field_name } 
                | method_name ( argument [ ,...n] ) } ]
              | expression
              [ [ AS ] column_alias ] 
             }
          | column_alias = expression 
        } [ ,...n ] 
      

  5.   

    distinct就是面向行级的取唯一记录的关键字
      

  6.   

    以前学习的时候,同学建议过一个书
    http://item.jd.com/10080177.html你可以先从电子版的去过下
      

  7.   

      下面先来看看例子:
        table表
        字段1     字段2
        id        name
        1           a
        2           b
        3           c
        4           c
        5           b
        库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。
        比如我想用一条语句查询得到name不重复的所有数据,那就必须
        使用distinct去掉多余的重复记录。
        select distinct name from table
        得到的结果是:
        ----------
        name
        a
        c
        好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:
        select distinct name, id from table
        结果会是:
        ----------
        id name
        1 a
        2 b
        3 c
        4 c
        5 b
        distinct怎么没起作用?作用是起了的,不过他同时作用了两个
        字段,也就是必须得id与name都相同的才会被排除
        我们再改改查询语句:
        select id, distinct name from table
        很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。
        --------------------------------------------------------
        下面方法可行:
        select *, count(distinct name) from table group by name
        结果:
        id name count(distinct name)
        1 a 1
        2 b 1
        3 c 1
        最后一项是多余的,不用管就行了,目的达到
        group by 必须放在 order by 和 limit之前,不然会报错
      

  8.   

    (1)用于删除重复记录时,必须放在所有字段前面;若是聚合统计时,则放在聚合函数内所统计字段前面。
    是其后所有字段。
    (2)如果跟group by 一起使用,查询的效率会高一些。
      
      

  9.   

    1、distinct必须放在所有字段开头吗
     
    distinct行级的,必须放在所有字段开头
     
    2、distinct的限定范围,是紧随其后的那个字段,还是其后所有字段。
     
    因为distinct是行级的,因此是其后所有的字段,虽然group by也有这种效果,但是,group by的主要用途还是分组查询。