用Group by后。排序会从小到大排了。原先的顺序都变了。用distinct也一样。有没方法Group by 后保持原先的排序?

解决方案 »

  1.   

    原先是什么顺序,没有什么顺序么 
    group by没顺序的,order by 吧
      

  2.   

    select *
    from tb
    group by xxx
    order by xxx
      

  3.   


    CREATE TABLE IF NOT EXISTS `test` (
      `a` int(11) NOT NULL,
      `b` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1; INSERT INTO `test` (`a`, `b`) VALUES
    (1, 2),
    (3, 2),
    (2, 2),
    (8, 2),
    (6, 1),
    (7, 2),
    (11, 1),
    (23, 1),
    (78, 0),
    (16, 3);
    SELECT * FROM `test` GROUP BY B
    后怎么保持原先的`a`字段的排序。不要打乱了。
      

  4.   

    SELECT * FROM `test` GROUP BY B order by 1
      

  5.   

    SELECT * FROM `test` GROUP BY B
    不是标准的SQL语句,你要达到什么目的,贴出来看看
      

  6.   

    SELECT * FROM `test` GROUP BY B怎么说不是标准的sql?现在就是这样啊。有一批数据。排序已定像3楼的。
    但b列有重复的。要去掉重复的。以最先的行为准。像3楼。我想得到的数据是(1, 2)
    (6, 1)
    (78, 0)
    (16, 3)
      

  7.   

    数据库原理中一个重要的论点就是集全中的记录是没有顺序的。 不能依赖数据库自己的排序。 你的原表中需要有个排序的字段以能确定原始顺序,比如加个ID序列。 
    现有表结构 
    CREATE TABLE IF NOT EXISTS `test` (
     `a` int(11) NOT NULL,
     `b` int(11) NOT NULL
    )无法实现这种排序功能。
      

  8.   

    加入自增ID
    SELECT  * FROM TEST A WHERE NOT EXISTS (SELECT 1 FROM TEST WHERE A.B = B AND A.ID > ID)
    OR
    将2、1、0、3存入表中(LSB,字段ID自增),与GROUP后的结果连接,按ID排序
      

  9.   


    你这个原先的排序具体指的是什么?直接 SELECT * FROM `test` 
    把group by和 order by 都去掉不就是了。
      

  10.   

    谢谢楼上几位。还是有些弄不懂。不是只有这两个字段的。我拿了份真实的数据过来了。
    这数据是查询一sql得出的。
    SELECT * , COUNT(obj_id) AS obj_id_sum , SUM( sl_percentage ) AS sl_percentage_sum, SUM( sl_density ) AS sl_density_sum FROM search_list WHERE sw_id IN ('284701','284696','138528','211201','131676') AND sl_type IN ( 1, 2 ) GROUP BY obj_id, sl_type ORDER BY sl_type ASC, obj_id_sum DESC , sl_percentage_sum DESC , sl_density_sum DESC  
    现在得到这下面的结果后我想排除掉objc_id重复的。但得以最上行为准且顺序不要变。
    行不行的? 
    sl_id obj_id  objc_id  sw_id sl_percentage sl_density sl_type   obj_id_sum sl_percentage_sum sl_density_sum
    --------------------------------------------------------------------------------------
    298 13 1224 131676 12.50 0.00 1 2 37.50 0.00
    306 6 1069 138528 12.50 0.00 1 2 29.17 0.00
    239 11 1224 211201 11.11 0.00 1 2 22.22 0.00
    58 4 74 131676 4.00 0.00 1 2 8.00 0.00
    4 1 1224 211201 57.14 0.00 1 1 57.14 0.00
    100 7 1224 211201 25.00 0.00 1 1 25.00 0.00
    266 12 1224 284696 12.50 0.00 1 1 12.50 0.00
    166 9 1224 211201 11.11 0.00 1 1 11.11 0.00
    114 8 1224 138528 11.11 0.00 1 1 11.11 0.00
    307 14 1224 284696 7.69 0.00 1 1 7.69 0.00
    78 5 1224 211201 5.56 0.00 1 1 5.56 0.00
    253 11 1224 211201 10.71 0.00 2 2 21.42 0.00
    334 14 1224 211201 5.00 0.00 2 2 7.86 0.00
    129 8 1224 138528 1.39 0.00 2 2 5.56 0.00
    204 10 1224 211201 2.33 0.00 2 2 4.66 0.00
    170 9 1224 211201 13.89 0.00 2 1 13.89 0.00
    276 12 1224 211201 5.00 0.00 2 1 5.00 0.00
      

  11.   

    你需要一个用于排序的字段。 因为数据库本身并不保证每次select * from table 的输出顺序如果没有ORDER BY定义。
      

  12.   

    这结果是我ORDER BY sl_type ASC, obj_id_sum DESC , sl_percentage_sum DESC , sl_density_sum DESC   后的啊。但有重复的obj_id。我想排除掉。
    +-------+--------+---------+--------+---------------+------------+---------+------------+-------------------+----------------+
    | sl_id | obj_id | objc_id | sw_id  | sl_percentage | sl_density | sl_type | obj_id_sum | sl_percentage_sum | sl_density_sum |
    +-------+--------+---------+--------+---------------+------------+---------+------------+-------------------+----------------+
    |   298 |     13 |    1224 | 131676 |         12.50 |       0.00 |       1 |          2 |             37.50 |           0.00 |
    |   306 |      6 |    1069 | 138528 |         12.50 |       0.00 |       1 |          2 |             29.17 |           0.00 |
    |   239 |     11 |    1224 | 211201 |         11.11 |       0.00 |       1 |          2 |             22.22 |           0.00 |
    |    58 |      4 |      74 | 131676 |          4.00 |       0.00 |       1 |          2 |              8.00 |           0.00 |
    |     4 |      1 |    1224 | 211201 |         57.14 |       0.00 |       1 |          1 |             57.14 |           0.00 |
    |   100 |      7 |    1224 | 211201 |         25.00 |       0.00 |       1 |          1 |             25.00 |           0.00 |
    |   266 |     12 |    1224 | 284696 |         12.50 |       0.00 |       1 |          1 |             12.50 |           0.00 |
    |   166 |      9 |    1224 | 211201 |         11.11 |       0.00 |       1 |          1 |             11.11 |           0.00 |
    |   114 |      8 |    1224 | 138528 |         11.11 |       0.00 |       1 |          1 |             11.11 |           0.00 |
    |   307 |     14 |    1224 | 284696 |          7.69 |       0.00 |       1 |          1 |              7.69 |           0.00 |
    |    78 |      5 |    1224 | 211201 |          5.56 |       0.00 |       1 |          1 |              5.56 |           0.00 |
    |   253 |     11 |    1224 | 211201 |         10.71 |       0.00 |       2 |          2 |             21.42 |           0.00 |
    |   334 |     14 |    1224 | 211201 |          5.00 |       0.00 |       2 |          2 |              7.86 |           0.00 |
    |   129 |      8 |    1224 | 138528 |          1.39 |       0.00 |       2 |          2 |              5.56 |           0.00 |
    |   204 |     10 |    1224 | 211201 |          2.33 |       0.00 |       2 |          2 |              4.66 |           0.00 |
    |   170 |      9 |    1224 | 211201 |         13.89 |       0.00 |       2 |          1 |             13.89 |           0.00 |
    |   276 |     12 |    1224 | 211201 |          5.00 |       0.00 |       2 |          1 |              5.00 |           0.00 |
    +-------+--------+---------+--------+---------------+------------+---------+------------+-------------------+----------------+
    17 rows in set (0.00 sec)
      

  13.   

    select * 
    from (
    select *
    from table1
    group by obj_id
    ) t
    order by sl_type ASC, obj_id_sum DESC , sl_percentage_sum DESC , sl_density_sum DESC
      

  14.   

    我原先也想这么弄。:(
    但这样达不到要求。因为第一次obj_id GROUP BY后sl_type会合并了。排序不对了。
      

  15.   

    select *  
    from (
    select *
    from (select * from table1 order by sl_type ASC, obj_id_sum DESC , sl_percentage_sum DESC , sl_density_sum DESC) v
    group by obj_id
    ) t
    order by sl_type ASC, obj_id_sum DESC , sl_percentage_sum DESC , sl_density_sum DESC