[英]MySQL - Difference between two queries
(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,但是第二個查詢中也需要它。
謝謝,
選中此SQL FIDDLE DEMO以了解您的兩個查詢之間的區別。
當您按日期將數據按降序使用排序,然后使用clientId將數據分組時,它將檢索所有按日期最新的客戶端數據。
如果直接使用GROUP BY
子句,則它將按clientId從表中獲取每個第一條記錄。
第一個查詢(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顏色,並按client id將其分組。 唯一的區別是,它沒有按數量日期降序對它進行排序 。
執行時,它們實際上將執行相同的操作(行順序將有所不同),但是您的數據庫引擎應該足夠聰明,以使兩者的性能也幾乎相同。 至於可讀性,我將在group by語句之前使用ORDER BY quantitydate DESC
上的第二個查詢和定位,以便與第一個查詢執行相同的操作(當然,除非您不希望將其排序)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.