(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,但确实如此 在第二个查询中也是必需的。
谢谢,
答案 0 :(得分:1)
选中此SQL FIDDLE DEMO以了解您的两个查询之间的区别。
当您按日期按降序使用数据时按顺序使用 使用clientId对数据进行分组将比检索所有客户端数据 最新的日期。
如果直接使用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>