MySQL - 两个查询之间的差异

时间:2012-12-28 04:44:02

标签: mysql select group-by

(SELECT * FROM (SELECT clientid,totalquantity from clientquantity 
order by quantitydate desc) AS A GROUP BY clientid);

SELECT clientid,totalquantity from clientquantity group by clientid;

有人可以解释上面两个查询之间的区别。结果集在计算的行数方面是相同的。那么,2个查询之间有区别吗?例如,性能方面,还是数据差异?

第一个查询用作LEFT JOIN查询与另一个表的一部分。为了简单起见,我在本文中删除了其他表格。

  

上面是因为第二个查询也需要包含一个ORDER BY,而使用SQL只能这样做就像完成它一样   在第一次查询?我从第二个查询中省略了ORDER BY,但确实如此   在第二个查询中也是必需的。

谢谢,

2 个答案:

答案 0 :(得分:1)

选中此SQL FIDDLE DEMO以了解您的两个查询之间的区别。

  1. 当您按日期按降序使用数据时按顺序使用 使用clientId对数据进行分组将比检索所有客户端数据 最新的日期。

  2. 如果直接使用GROUP BY子句,则会先获取每个子句 来自clientId的表中的记录。

答案 1 :(得分:0)

第一个查询(SELECT * FROM (SELECT clientid,totalquantity from clientquantity order by quantitydate desc) AS A GROUP BY clientid);(对我而言)就像冗余部分一样。查询的最深部分(SELECT clientId,totalquantity...)从quantitydate获取表中自己的所有信息。查询的第二部分是SELECT * FROM ...,它只是说"将内部结果集中的所有数据拉入我的结果集"。最后一部分是获取结果集并按客户端ID对其进行分组。

第二个查询SELECT clientid,totalquantity from clientquantity group by clientid;几乎完全相同,但更为简洁:它抓住clientid和totalquantity coluns并按客户端ID对其进行分组。 唯一的区别是它没有按数量降序对其进行排序。

执行时,它们基本上会做同样的事情(行顺序会有所不同),但是你的数据库引擎应该足够聪明,两者的性能几乎相同。至于可读性,我会在group by语句之前使用第二个查询并粘贴ORDER BY quantitydate DESC,以便它与第一个相同(除非你当然没有订购它)。 / p>