在一个查询中同时具有GROUP BY和ORDER BY

时间:2016-09-16 16:36:05

标签: mysql sql group-by sql-order-by

我被告知在一个MySQL查询中我不能拥有GROUP BY和ORDER BY。这是查询的缩写版本 -

write()

我被告知使用GROUP BY的ORDER BY会给我不同的结果,ORDER BY唯一可行的方法是主要查询是否嵌套在

SELECT n.colorName, n.colorComp, n.colorID, SUM(n.gallons) AS TotalGallons
FROM netTran n, Store m, Product p
WHERE ((n.store = m.store) and m.state = "FL")
AND ((n.salesNbr = p.salesNbr) AND (p.intExt = "EXTERIOR" OR p.intExt = "INT/EXT"))
AND ((n.clrnt1 = "L1") AND (n.clrnt1 = "R3"))
GROUP BY n.colorComp, n.colorID
ORDER BY TotalGallons DESC;

这是对的吗?

4 个答案:

答案 0 :(得分:2)

使用查询

SELECT n.colorName, n.colorComp, n.colorID, SUM(n.gallons) AS     TotalGallons
FROM netTran n, Store m, Product p
WHERE ((n.store = m.store) and m.state = "FL")
AND ((n.salesNbr = p.salesNbr) AND (p.intExt = "EXTERIOR" OR p.intExt = "INT/EXT"))
AND ((n.clrnt1 = "L1") AND (n.clrnt1 = "R3"))
GROUP BY n.colorName, n.colorComp,n.colorID
ORDER BY TotalGallons DESC;

您可以通过单个查询获取地址并按顺序排序。但是,如果要汇总列

,则需要提供所有列

答案 1 :(得分:1)

分组依据将更改结果。按顺序排列将按顺序显示数据..

让ORDER BY与GROUP BY一起获得不同的结果

答案 2 :(得分:0)

是的,那是真的。在mysql reference manual中,您可以阅读

如果使用GROUP BY,则输出行将根据GROUP BY列进行排序,就好像您具有相同列的ORDER BY一样。为了避免GROUP BY产生的排序开销,添加ORDER BY NULL:

我认为这意味着ORDER BY完全没有效果。

好奇......我一直以为按工作顺序......

答案 3 :(得分:0)

GROUP BYORDER BY是两回事。你不能一起使用它是完全错误的。

GROUP BY用于告诉DBMS每个组聚合数据。在您的示例中,您将gallons colorCompcolorID加总。

ORDER BY用于告诉DBMS您希望显示数据的顺序。在您的查询中,gallons降序的总和。

在标准SQL中,通常不使用GROUP BY而不使用ORDER BY,因为尽管进行了分组,但数据可能会显示为无序。然而,MySQL决定保证GROUP BY执行ORDER BY。所以在MySQL中,没有必要在ORDER BY之后使用GROUP BY,只要您不希望另一个订单,如您的示例所示。现在不推荐使用此非标准行为。见这里:

https://dev.mysql.com/doc/refman/5.6/en/group-by-optimization.html

  

但是,不推荐使用隐式GROUP BY排序。

因此,无论何时需要对数据进行排序,都应该有一个ORDER BY子句。毫无例外。