Select
sql中的group by語句和嵌套select語句之間有什麼性能差異嗎?
我很想知道使用 group by 語句和嵌套選擇來實現相同結果之間的區別。例如考慮我有兩個表,如下所示:
tblPurchase ID SellerID BuyerID Date Price tblPerson ID Name Mail Mobile
現在我想顯示購買列表以及賣家和買家的關聯名稱由於賣家 ID 和買家 ID 指的是同一個表,我需要兩個嵌套選擇來獲取他們的名字,所以我會寫:
Select tblPurchase.ID, tblPurchase.Date, select (tblPerson.Name from tblPerson where tblPerson.ID = tblPurchase.SellerID ) as [Seller's Name], select (tblPerson.Name from tblPerson where tblPerson.ID = tblPurchase.BuyerID ) as [Buyer's Name] from tblPurchase
這是第一種方法,我想它也可以使用 group by 語句來完成(雖然我自己做不到,因為兩個欄位都指向一個,所以我被卡在了 join 部分!)
這兩種說法有什麼區別嗎?因為我認為 group 本身實際上稍後會轉換為相同的嵌套選擇,然後再執行。
你在混合蘋果和橙子,我的朋友。您的查詢相當於:
Select p.ID, p.Date, s.Name AS [Seller's Name], b.Name AS [Buyer's Name] FROM tblPurchase AS p LEFT JOIN tblPerson AS s ON p.SellerID=s.ID LEFT JOIN tblPerson AS b ON p.BuyerID=b.ID;
.. 有一個例外:如果它返回多條記錄(即如果 ID 在 tblPerson 表中不是唯一的),您的子查詢將不起作用。
另一方面,GROUP BY 用於聚合數據。也就是說,計算總和、計數等。如果您想知道每個買家下了多少訂單,您可以使用 GROUP BY 和聚合函式(SUM()、MAX()、COUNT() 等),如下所示:
SELECT BuyerID, COUNT(*) AS [Number or orders per buyer] FROM tblPurchase GROUP BY BuyerID;
如果您想查看每個買家的購買數量和日期,您可以將該
Date
列添加到 SELECT 以及 GROUP BY:SELECT BuyerID, Date, COUNT(*) AS [Number or orders per buyer] FROM tblPurchase GROUP BY BuyerID, Date;