繁体   English   中英

通过外键查找Max()值

[英]Finding Max() values via foreign key

考虑以下数据库结构:

 __________                 __________
| Trucks   |               | Mileage  |
|__________|__________     |__________|________________________
| ID    | DRIVER      |    | TRUCK_ID  | MILEAGE  | OIL_CHANGE |
|---------------------|    |-----------------------------------|
| 1     | Tony        |    | 1         | 100000     105000     |
| 2     | George      |    | 2         | 6020       10020      |
| 3     | Mary        |    | 3         | 37798      41000      |
|_____________________|    | 3         | 41233      47200      |
                           | 3         | 49000                 |
                           |___________________________________|

我想得到一个结果集,其中包含每个驾驶员的最大里程和最大机油变化。

_________________________________
| 1  | Tony  |  100000 | 105000 |
| 2  | George|  6020   | 10020  |
| 3  | Mary  |  49000  | 47200  |
|_______________________________|

到目前为止,这是我尝试过的:

SELECT t.*, MAX(m.mileage) AS mileage, MAX(m.oil_change) AS oil_change
FROM trucks t
LEFT JOIN mileage m ON t.id = m.truck_id
GROUP BY t.id

但这似乎不允许MAX函数正常工作。 它并不总是包含mileage的实际最大值

得到它了! 您的里程列必须定义为字符类型,而不是数字类型! 如果发生这种情况,则按字母顺序而不是按值顺序进行排序。

您应该将转换mileageoil_change列数字类型(我建议INT根据所提供的数据样本)。

当您不转换它们时,它将起作用:

SELECT t.*, MAX(cast(m.mileage as int)) AS mileage, 
            MAX(cast(m.oil_change as int)) AS oil_change
FROM trucks t
LEFT JOIN mileage m ON t.id = m.truck_id
GROUP BY t.id

以下查询应该可以解决您的问题。

SELECT T.DRIVER,MIN(MILEAGE) AS MIN_MILEAGE,MIN(OIL_CHANGE) AS MIN_OIL_CHANGE
FROM TRUCKS T INNER JOIN MILEAGE M
ON T.ID = M.TRUCK_ID
GROUP BY T.DRIVER;


SELECT T.DRIVER,MAX(MILEAGE) AS MAX_MILEAGE,MAX(OIL_CHANGE) AS MAX_OIL_CHANGE
FROM TRUCKS T INNER JOIN MILEAGE M
ON T.ID = M.TRUCK_ID
GROUP BY T.DRIVER;

关于Venk

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM