我被告知在一个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;
这是对的吗?
答案 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 BY
和ORDER BY
是两回事。你不能一起使用它是完全错误的。
GROUP BY
用于告诉DBMS每个组聚合数据。在您的示例中,您将gallons
按 colorComp
和colorID
加总。
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
子句。毫无例外。