SELECT count(*) from (SELECT uuid,create_date from tbb_api_access WHERE create_date > '2012-02-17' GROUP BY uuid) as tSELECT count(*) from (SELECT id,create_date from tbb_api_access GROUP BY uuid) as t WHERE create_date > '2012-02-17'这条sql在执行结果上为什么会有差异?

解决方案 »

  1.   


    如果表tbb_api_access只有一条记录 
    uuid,create_date
    1, '2012-02-11'则你可以看到(SELECT uuid,create_date from tbb_api_access WHERE create_date > '2012-02-17' GROUP BY uuid) 返回是空而(SELECT id,create_date from tbb_api_access GROUP BY uuid) 是 1,'2012-02-11'
      

  2.   

    结果是不一样
    第一条sql执行的结果大一些
    个人分析where的执行顺序觉得结果应该是一样的
      

  3.   

    一个是先WHERE再GROUP
    另一个是先GROUP再WHERE
      

  4.   

    个人分析无论是先执行where 还是先group 其最结果都应该一样!所以这里应该不是先后顺序的问题!
      

  5.   

    结果怎么会一样呢?关键是要明白sql的执行的顺序的.先执行from后的表然后再
    执行where后的,再select.
      

  6.   

    ---具体的sql执行顺序
    (8)SELECT (9)DISTINCT  (11)<Top Num> <select list>
    (1)FROM [left_table]
    (3)<join_type> JOIN <right_table>
    (2)        ON <join_condition>
    (4)WHERE <where_condition>
    (5)GROUP BY <group_by_list>
    (6)WITH <CUBE | RollUP>
    (7)HAVING <having_condition>
    (10)ORDER BY <order_by_list>