2014-04-04 148 views
2

我几天来一直在学校项目中工作,并且选择了在DVD俱乐部数据库上工作。我有六张桌子,但对于这个问题,只有两个是相关的。客户表和贷款表。所以,我想要做的是计算每一个客户到目前为止他所获得的贷款数量,以及最多的贷款数量,以便他可以在下个月获得免费DVD。这是我写的代码,但它不挑特定的客户端,它表明具有特定客户的贷款的最大数量的所有客户端:在特定列中选择具有最大值的行,SQL Server

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 

回答

2

使用以下

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 
+0

哇,非常感谢,我刚刚更改GROUP BY到tblClients.Client_ID,因为我得到一个错误。 – AIV

+1

谢谢。我已经注意到并修改了查询:) – Madhivanan

1

您可以用单一的综合集团,由客户与最大贷款下令这样做:必须包含在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; 

任何选择从客户端列,我会建议使用JOINs而不是WHERE加入。

编辑
什么可能是整洁是分裂最贷款客户端Id的决心和中获取客户端的数据的其余部分的关注,像这样(而非笨拙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; 
相关问题