我有 4 個資料庫表出租汽車公司資料庫、出租汽車詳細資訊資料庫、出租汽車價格資料庫和預定汽車資料庫。
有多家租車公司和地點有多輛汽車,每輛汽車的費率范圍不同,
我正在嘗試做的是查詢所有這些資料庫,以找出哪些地點只有 22 年 3 月 4 日至 22 年 3 月 10 日的可用卡車。
我希望每個位置都顯示每個位置有多少卡車可用,以及最低的每日費率和最高的每日費率。
問題是每輛卡車都有不同的價格,所以當我按位置進行分組時,當有兩輛卡車可用時,它只給出一輛卡車的高價和低價。對于我搜索的日期,我的最低價應該是兩者中最低的每日匯率,而最高匯率應該是兩者中最高的每日匯率。
我用下面的資料和代碼得到的結果是:
| 地點 | 車數 | 型別 | 租車公司名稱 | 低利率 | 高幾率 |
|---|---|---|---|---|---|
| 洛杉磯 | 1 | 卡車 | 汽車勒克斯 | 281 | 281 |
| 紐約 | 2 | 卡車 | 折扣租車 | 125 | 125 |
我想要得到的是:
| 地點 | 車數 | 型別 | 租車公司名稱 | 低利率 | 高幾率 |
|---|---|---|---|---|---|
| 洛杉磯 | 1 | 卡車 | 汽車勒克斯 | 281 | 281 |
| 紐約 | 2 | 卡車 | 折扣租車 | 125 | 169 |
我有四個資料庫表,如下所示
租車公司資料庫表名稱:(地理位置)
| 地點 | 地址 | 公司名 |
|---|---|---|
| 紐約 | 紐約皇后區 11430 | 折扣租車 |
| 洛杉磯 | 1 World Way, 洛杉磯, CA 90045 | 汽車勒克斯 |
租車詳細資訊資料庫表名稱:(汽車)
| 地點 | 車 | 型別 |
|---|---|---|
| 紐約 | 紐約車1 | 卡車 |
| 紐約 | 紐約車2 | 卡車 |
| 紐約 | 紐約車3 | 車 |
| 紐約 | 紐約汽車4 | 卡車 |
| 洛杉磯 | LACar1 | 卡車 |
| 洛杉磯 | LACar2 | 卡車 |
| 洛杉磯 | LACar3 | 卡車 |
| 洛杉磯 | LACar4 | 范 |
租車費率資料庫表名稱:(價格)
| 車 | 從日期 | 迄今為止 | 日費率 |
|---|---|---|---|
| 紐約車1 | 2022-01-01 | 2022-04-01 | 199 |
| 紐約車1 | 2022-04-01 | 2022-07-01 | 499 |
| 紐約車1 | 2022-07-01 | 2022-12-31 | 300 |
| 紐約車2 | 2022-01-01 | 2022-04-01 | 125 |
| 紐約車2 | 2022-04-01 | 2022-07-01 | 399 |
| 紐約車2 | 2022-07-01 | 2022-12-31 | 200 |
| 紐約車3 | 2022-01-01 | 2022-04-01 | 169 |
| 紐約車3 | 2022-04-01 | 2022-07-01 | 267 |
| 紐約車3 | 2022-07-01 | 2022-12-31 | 250 |
| 紐約汽車4 | 2022-01-01 | 2022-04-01 | 169 |
| 紐約汽車4 | 2022-04-01 | 2022-07-01 | 267 |
| 紐約汽車4 | 2022-07-01 | 2022-12-31 | 250 |
| LACar1 | 2022-01-01 | 2022-04-01 | 281 |
| LACar1 | 2022-04-01 | 2022-07-01 | 267 |
| LACar1 | 2022-07-01 | 2022-12-31 | 267 |
| LACar2 | 2022-01-01 | 2022-04-01 | 300 |
| LACar2 | 2022-04-01 | 2022-07-01 | 250 |
| LACar2 | 2022-07-01 | 2022-12-31 | 267 |
| LACar3 | 2022-01-01 | 2022-04-01 | 500 |
| LACar3 | 2022-04-01 | 2022-07-01 | 700 |
| LACar3 | 2022-07-01 | 2022-12-31 | 400 |
| LACar4 | 2022-01-01 | 2022-04-01 | 500 |
| LACar4 | 2022-04-01 | 2022-07-01 | 700 |
| LACar4 | 2022-07-01 | 2022-12-31 | 400 |
預訂汽車資料庫表名稱:(預訂)
| 車 | 到達日期 | 出發日期 | 姓名 |
|---|---|---|---|
| 紐約車1 | 2022-03-01 | 2022-03-19 | 邁克·史密斯 |
| LACar2 | 2022-03-08 | 2022-03-16 | 喬·拉克 |
| LACar3 | 2022-03-05 | 2022-03-25 | 凱利約翰遜 |
我嘗試過的代碼如下
SELECT Cars.Location, COUNT(Cars.Location) AS CarCount, Cars.Type,
(SELECT CompanyName
FROM geolocations
WHERE geolocations.Location = Cars.Location) AS RentalCarCompanyName,
(SELECT MIN(dayrate)
FROM prices
WHERE Car = Cars.Car AND fromdate <= '2022-03-14' AND DATE_ADD(todate, INTERVAL 1 DAY) > '2022-03-10' LIMIT 1) AS lowrate,
(SELECT MAX(dayrate)
FROM prices
WHERE Car = Cars.Car AND fromdate <= '2022-03-14' AND DATE_ADD(todate, INTERVAL 1 DAY) > '2022-03-10' LIMIT 1) AS highrate
FROM Cars
WHERE Car NOT IN (
SELECT Car
FROM bookings
WHERE (
ArrivalDate <= '2022-03-14' AND
DepartureDate > '2022-03-10'
)
) AND Cars.Type = 'TRUCK'
GROUP BY Location
ORDER BY Location ASC
我有一個加載資料的小提琴
uj5u.com熱心網友回復:
這是您更新的查詢
SELECT
`cars`.`Location`,
COUNT(`cars`.`Location`) AS CarCount,
`cars`.`Type`,
`geolocations`.`CompanyName`,
MIN(`prices`.`dayrate`) AS lowrate,
MAX(`prices`.`dayrate`) AS highrate
FROM
`cars`
JOIN `geolocations` ON `cars`.`Location` = `geolocations`.`Location`
JOIN `prices` ON `cars`.`Car` = `prices`.`Car`
WHERE
`cars`.Car NOT IN (
SELECT
Car
FROM
bookings
WHERE
(
ArrivalDate <= '2022-03-14'
AND DepartureDate > '2022-03-10'
)
)
AND Cars.Type = 'TRUCK'
AND `prices`.`fromdate` <= '2022-03-14'
AND DATE_ADD(todate, INTERVAL 1 DAY) > '2022-03-10'
GROUP BY
Location
ORDER BY
Location ASC
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427758.html
標籤:mysql join group-by subquery
下一篇:選擇具有下一行ID的行的問題
