我有三列(carID,clientID,numClients)。第一个识别客户,第二个识别汽车,第三个显示每个客户租用汽车的次数。
我需要为每个carID获取numClients的最大值。
我这样做了:
SELECT carID, clientID,
COUNT(*) AS numClients
FROM RENT R
JOIN DETAILS_OF_RENT D ON d.rentID = r.ID
GROUP BY carID, clientID
ORDER BY carID, clientID;
所以我得到的表是这样的:
+---------+----------+------------+
| carID | clientID | numClients |
+---------+----------+------------+
| 0765BBC | C02 | 1 |
| 0765BBC | C05 | 1 |
| 0765BBC | C07 | 1 |
| 0765BBC | C13 | 1 |
| 0765BBC | C14 | 1 |
| 1234XQP | C01 | 1 |
| 1234XPQ | C02 | 1 |
| 1234XPQ | C07 | 1 |
| 1234XPQ | C09 | 2 |
| 1234XPQ | C11 | 1 |
| 1523BBD | c07 | 1 |
| 1523BBD | c09 | 2 |
+---------+----------+------------+
我的输出应该是0765BBC和1523BBD,因为我们是由同一个客户租用了2次。
所以,我必须得到同一客户租用的汽车的carID多次,但我不知道如何从上表中选择这些行
答案 0 :(得分:1)
你似乎想要这样的东西:
SELECT rd.*
FROM (SELECT rd.*, DENSE_RANK() OVER (ORDER BY client_cnt DESC) as seqnum
FROM (SELECT carID, clientID, COUNT(*) OVER (PARTITION BY clientId) as client_cnt
FROM RENT R JOIN
DETAILS_OF_RENT D
ON d.rentID = r.ID
) rd
) rd
WHERE seqnum = 1;
我不认为需要聚合。最里面的子查询添加一列,该列是每个客户端的汽车总数。中间子查询添加了一个标识最大值的列。外部查询然后选择最大值。