选择每个carID的最大值

时间:2018-04-27 18:15:36

标签: sql oracle

我有三列(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多次,但我不知道如何从上表中选择这些行

1 个答案:

答案 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;

我不认为需要聚合。最里面的子查询添加一列,该列是每个客户端的汽车总数。中间子查询添加了一个标识最大值的列。外部查询然后选择最大值。