如何在MySQL中检索预订量最少的月份?

时间:2016-04-19 09:55:54

标签: mysql sql

我正在开展一个小型的Web项目,我想知道我需要使用什么SQL才能找到预订量最少的月份。

我有一个Booking表:

enter image description here

我有一个Package表:

enter image description here

我有一个HolidayMaker表:

https://i.gyazo.com/b3459cd20e4fc795c46305f357f6016e.png

我认为这可能与嵌套的SELECT语句有关,但我并不完全确定。

谢谢,詹姆斯。 : - )

5 个答案:

答案 0 :(得分:2)

使用MONTHNAMEGROUP BY COUNT

SELECT MONTHNAME(Bo_Datebooked), COUNT(Booking_ID)
FROM Booking
GROUP BY MONTHNAME(Bo_Datebooked)
ORDER BY COUNT(Booking_ID) ASC

答案 1 :(得分:2)

以下查询返回每个月的预订金额:

SELECT   DATE_FORMAT(Bo_DateBooked, '%Y-%m') AS BookingMonth,
         SUM(Package_Price)                  AS MonthlyAmount
FROM     Booking
JOIN     Package
  ON     Booking.Package_ID = Package.Package_ID
GROUP BY DATE_FORMAT(Bo_DateBooked, '%Y-%m');

使用嵌套的SELECT,您可以获得最低限度。

答案 2 :(得分:1)

这只是limit的汇总:

select date_format(bo_datebooked, '%Y-%m') as yyyymm, count(*)
from booking b
group by date_format(bo_datebooked, '%Y-%m') 
order by count(*) desc
limit 1;

答案 3 :(得分:1)

如果您有兴趣查看结果,只有'几个月,不考虑年数:(即所有1月的所有预订,无论哪一年):

SELECT MONTHNAME(Bo_Datebooked) as month, COUNT(1) as num_reservations
FROM Booking
GROUP BY month
ORDER BY num_reservations ASC
/* additionality add... 
/* LIMIT 1 */
/* ...to see only the lower result */

如果你担心每年的不同月份(即:从2016年1月开始的研究,2012年1月的预订......):

SELECT CONCAT(MONTHNAME(Bo_Datebooked), YEAR(Bo_Datebooked)) as date, COUNT(1) as num_reservations
FROM Booking
GROUP BY date
ORDER BY num_reservations ASC
/* additionality add... 
/* LIMIT 1 */
/* ...to see only the lower result */

警告:任何一项都不会显示0个月的预订!!!

答案 4 :(得分:0)

你可以使用这个sql。我在我的ms sql server中测试了这个。如果它不工作只是找到类似的mysql服务器语法。好 ?

SELECT CONVERT(CHAR(3), DATENAME(MONTH, Bo_Datebooked)), COUNT(Booking_Id) FROM Booking
GROUP BY CONVERT(CHAR(3), DATENAME(MONTH, Bo_Datebooked))
ORDER BY COUNT(Booking_Id) ASC

希望这会对你有所帮助