Sql 为每个carID选择最大值

Sql 为每个carID选择最大值,sql,oracle,Sql,Oracle,我有三列(carID、clientID、numClients)。第一个标识客户,第二个标识汽车,第三个显示每个客户租车的次数 我需要为每个carID获取numclient的最大值 我这样做: 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 carI

我有三列(carID、clientID、numClients)。第一个标识客户,第二个标识汽车,第三个显示每个客户租车的次数

我需要为每个carID获取numclient的最大值

我这样做:

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 |
+---------+----------+------------+
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;
我的输出应该是0765BBC和1523BBD,因为我们被同一个客户租了两次


因此,我必须获得同一客户多次租用的汽车的carID,但我不知道如何从上表中选择这些行

您似乎想要这样的信息:

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

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

但在0765BBC中,有不同的客户端,每个客户端的numclient值为1。可能意味着不同的客户一直在租这辆车。如果在这种情况下,所有客户都不一样,并且只租了一次车,那么如何让同一客户租车更多次?我想我必须获得同一客户租车的最大次数,然后我只需要保持车的最大价值。你可能应该查看你的测试数据,并添加相同车辆的案例同一客户多次租用。