Select

sql中的group by語句和嵌套select語句之間有什麼性能差異嗎?

  • August 20, 2014

我很想知道使用 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;

引用自:https://dba.stackexchange.com/questions/74408