[英]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.