SQL分组和排序

SQL分组和排序,GROUP BY和ORDER BY经常完成相同的工作,但它们非常不同,理解这一点很重要。下表汇总了它们之间的差别。

ORDER BY与GROUP BY
SQL分组和排序

表中列出的第一项差别极为重要。我们经常发现,用GROUP BY分组的数据确实是以分组顺序输出的。但并不总是这样,这不是SQL规范所要求的。此外,即使特定的DBMS总是按给出的GROUP BY子句排序数据,用户也可能会要求以不同的顺序排序。就因为你以某种方式分组数据(获得特定的分组聚集值),并不表示你需要以相同的方式排序输出。应该提供明确的ORDER BY子句,即使其效果等同于GROUP BY子句。

提示:不要忘记ORDER BY
一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法。千万不要仅依赖GROUP BY排序数据。

为说明GROUP BY和ORDER BY的使用方法,来看一个例子。下面的SELECT语句类似于前面那些例子。它检索包含三个或更多物品的订单号和订购物品的数目:

    SELECT order_num, COUNT(*) AS items
    FROM OrderItems
    GROUP BY order_num
    HAVING COUNT(*) >= 3;

输出结果如下:

    order_num      items
    ---------      -----
    20006           3
    20007           5
    20008           5
    20009           3

要按订购物品的数目排序输出,需要添加ORDER BY子句,如下所示:

    SELECT order_num, COUNT(*) AS items
    FROM OrderItems
    GROUP BY order_num
    HAVING COUNT(*) >= 3
    ORDER BY items, order_num;

输出结果如下:

    order_num      items
    ---------      -----
    20006           3
    20009           3
    20007           5
    20008           5

在这个例子中,使用GROUP BY子句按订单号(order_num列)分组数据,以便COUNT(*)函数能够返回每个订单中的物品数目。HAVING子句过滤数据,使得只返回包含三个或更多物品的订单。最后,用ORDER BY子句排序输出。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!

 

SQL教程