簡體   English   中英

在特定列SQL Server中選擇具有最大值的行

[英]Select the row with the max value in a specific column, SQL Server

過去幾天,我一直在從事一個學校項目,然后選擇在DVD俱樂部數據庫中工作。 我有六個表,但是對於這個問題,只有兩個相關。 客戶表和貸款表。 因此,我想做的是為每個客戶計算到目前為止他已貸出了多少筆貸款,其中最重要的是選擇了貸款額最大的客戶,因此他可以在下個月獲得免費的DVD。 這是我編寫的代碼,但是沒有選擇特定的客戶,而是顯示了具有特定客戶最大貸款額的所有客戶:

SELECT tblClients.Client_ID, MAX(x.Number_Of_Loans) AS MAX_NOL
FROM 
(
SELECT COUNT(tblLoans.Client_ID) AS Number_Of_Loans 
FROM tblClients, tblLoans WHERE tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblLoans.Client_ID
)x, tblClients, tblLoans
WHERE tblClients.Client_ID=tblLoans.Client_ID
GROUP BY tblClients.Client_ID, tblClients.Given_Name, 
tblClients.Family_Name, tblClients.Phone, tblClients.Address, tblClients.Town_ID

使用以下

SELECT TOP 1 tblClients.Client_ID,COUNT(tblLoans.Client_ID) AS MAX_NOL 
FROM tblClients, tblLoans 
WHERE tblClients.Client_ID=tblLoans.Client_ID 
GROUP BY tblClients.Client_ID
ORDER BY COUNT(tblLoans.Client_ID) DESC 

您可以使用單個匯總GROUP來執行此操作,GROUP由客戶以最高貸款額排序:

SELECT TOP 1 tblClients.Client_ID, tblClients.Given_Name, tblClients.Family_Name, 
       tblClients.Phone, tblClients.Address, tblClients.Town_ID, 
       COUNT(x.Number_Of_Loans) AS MAX_NOL
FROM
   tblClients INNER JOIN tblLoans 
     ON tblClients.Client_ID=tblLoans.Client_ID
GROUP BY tblClients.Client_ID, tblClients.Given_Name, tblClients.Family_Name,
         tblClients.Phone, tblClients.Address, tblClients.Town_ID
ORDER BY MAX_NOL DESC;

從客戶端選擇的任何列都需要包含在GROUP中,我建議使用JOINs而不是WHERE聯接。

編輯
可能更整潔的方法是,將貸款最多的ClientId的確定與獲取客戶的其余數據的關注點分開,而不是像這樣(而不是在許多列上使用笨拙的GROUP BY ):

SELECT c.Client_ID, c.Given_Name, c.Family_Name, 
       c.Phone, c.Address, c.Town_ID, 
       x.MaxLoans
FROM
   tblClients c
   INNER JOIN
     (SELECT TOP 1 tblClients.Client_ID, COUNT(tblLoans.Client_ID) AS MaxLoans
      FROM tblClients 
        INNER JOIN tblLoans 
        ON tblClients.Client_ID=tblLoans.Client_ID
      GROUP BY tblClients.Client_ID
      ORDER BY MaxLoans DESC) x
     ON c.Client_ID = x.Client_ID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM