【发布时间】:2021-07-31 05:08:07
【问题描述】:
我确信这是一个简单的修复,但无法弄清楚。我有一个 COUNT 函数需要计算出租的总数。单独,该功能工作得很好。我曾尝试使用 DISTINCT,调整 GROUP BY 和 ORDER BY,但无济于事。
当我添加 DATEDIFF 函数来租用 NumberofDays 时,COUNT 函数无法按预期方式工作。我应该用“2”而不是“1”得到一些结果。请注意,我需要按 Rentals.Boat_ID 订购。这是我的代码和表格结果。谢谢
SELECT
BOATS.Boat_Brand,
COUNT(RENTALS.Boat_ID) AS NumberofRentals,
DATEDIFF(Day, RENTALS.Rental_StartDay, RENTALS.Rental_EndDay)+1) as NumberofDaysRented
FROM RENTALS
INNER JOIN BOATS
ON RENTALS.Boat_ID = BOATS.Boat_ID
GROUP BY
BOATS.Boat_Brand,
RENTALS.Rental_StartDay,
RENTALS.Rental_EndDay
ORDER BY
COUNT(RENTALS.Boat_ID) DESC;
| Boat_Brand | NumberofRentals | NumberofDaysRented |
|---|---|---|
| Blue Martin | 1 | 20 |
| Blue Martin | 1 | 35 |
| Boston | 1 | 52 |
| Cherubini | 1 | 11 |
| Dufour | 1 | 10 |
| Eagle Craft | 1 | 19 |
| Motor Yacht | 1 | 17 |
| Motor Yacht | 1 | 47 |
| Grady-White | 1 | 1 |
| Horizon | 1 | 22 |
| Lemsteraak | 1 | 19 |
| Lund | 1 | 64 |
| Mastercraft | 1 | 19 |
| Mastercraft | 1 | 1 |
| Nauticat | 1 | 10 |
| Tracker | 1 | 18 |
| Tracker | 1 | 1 |
| Viking | 1 | 20 |
| Yamaha | 1 | 20 |
预期表格/结果:
| Boat_Brand | NumberofRentals | NumberofDaysRented |
|---|---|---|
| Blue Martin | 2 | 55 |
| Motor Yacht | 2 | 64 |
| Mastercraft | 2 | 20 |
| Tracker | 2 | 19 |
| Boston | 1 | 52 |
| Cherubini | 1 | 11 |
| Dufour | 1 | 10 |
| Eagle Craft | 1 | 19 |
| Grady-White | 1 | 1 |
| Horizon | 1 | 22 |
| Lemsteraak | 1 | 19 |
| Lund | 1 | 64 |
| Nauticat | 1 | 10 |
| Viking | 1 | 20 |
| Yamaha | 1 | 20 |
【问题讨论】:
-
你能发布你期望的结果吗?
-
您的 GROUP BY 需要在 SELECT 语句中包含所有非聚合列
-
请提供样本数据和所需的输出
-
我认为您不需要 RENTALS.Rental_StartDay、RENTALS.Rental_EndDay。将这些字段添加到 group by 只会按品牌计算当天租用和归还的船只数量。我认为您将不得不做更多的工作并计算出每艘船的租赁时间跨度,然后按品牌平均结果。
-
@AntonínLejsek 我已经添加了预期的结果,谢谢
标签: sql database sql-server-2008 computer-science