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

SELECT clientid,totalquantity from clientquantity group by clientid;

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

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

以上是因为第二个查询也需要包含一个 ORDER BY 并且使用 SQL 的唯一方法就是像在第一个查询中那样做吗?我在第二个查询中省略了 ORDER BY,但在第二个查询中也是必需的。

谢谢,

4

2 回答 2

1

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

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

  2. 如果您直接使用GROUP BY子句,那么它将通过 clientId 从表中获取每条第一条记录。

于 2012-12-28T06:07:02.840 回答
0

第一个查询(SELECT * FROM (SELECT clientid,totalquantity from clientquantity order by quantitydate desc) AS A GROUP BY clientid);(在我看来)像冗余部分。查询的最深部分 ( SELECT clientId,totalquantity...) 从按数量日期排序的表中获取所有信息。查询的第二部分是SELECT * FROM ...简单地说“将所有数据从内部结果集中拉到我的结果集中”。最后一部分是获取该结果集并按客户端 ID 对其进行分组。

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

执行时,它们基本上会做同样的事情(行顺序会不同),但是您的数据库引擎应该足够聪明,以使两者也具有几乎相同的性能。至于可读性,我将使用第二个查询并ORDER BY quantitydate DESC在 group by 语句之前添加,以便它与第一个执行相同的操作(当然,除非您不想对其进行排序)。

于 2012-12-28T04:48:55.490 回答