Mysql 计算每次旅行的预订数量-如果没有,则返回0
我有两张桌子Mysql 计算每次旅行的预订数量-如果没有,则返回0,mysql,sql,Mysql,Sql,我有两张桌子 CREATE TABLE `voyages` ( `voyage_id` int(11) NOT NULL, `voyage_type` int(11) NOT NULL, `voyage_groupBooking` tinyint(4) NOT NULL DEFAULT 0, `voyage_live` tinyint(4) NOT NULL DEFAULT 0, `voyage_featured` tinyint(4) NOT NULL DEFAULT 0, `voyage_n
CREATE TABLE `voyages` (
`voyage_id` int(11) NOT NULL,
`voyage_type` int(11) NOT NULL,
`voyage_groupBooking` tinyint(4) NOT NULL DEFAULT 0,
`voyage_live` tinyint(4) NOT NULL DEFAULT 0,
`voyage_featured` tinyint(4) NOT NULL DEFAULT 0,
`voyage_name` varchar(60) NOT NULL,
`voyage_slug` varchar(60) NOT NULL,
`voyage_shortDescription` varchar(150) NOT NULL,
`voyage_shortPageDescription` text NOT NULL,
`voyage_tag` varchar(20) DEFAULT NULL,
`voyage_detail` text NOT NULL,
`voyage_ageBracket` text NOT NULL DEFAULT '14-18',
`voyage_included` varchar(150) NOT NULL,
`voyage_image` text DEFAULT NULL,
`voyage_startDate` date NOT NULL,
`voyage_startTime` time NOT NULL,
`voyage_endDate` date NOT NULL,
`voyage_cost` decimal(11,2) NOT NULL,
`voyage_miles` int(11) DEFAULT NULL,
`voyage_hours` int(11) DEFAULT NULL,
`voyage_ports` int(11) DEFAULT NULL,
`voyage_deposit` int(2) NOT NULL DEFAULT 0,
`voyage_crewBerth` tinyint(2) NOT NULL,
`voyage_Afterguard` tinyint(2) NOT NULL,
`voyage_map` text DEFAULT NULL,
`voyage_mapZoom` tinyint(4) NOT NULL DEFAULT 8,
`voyage_addressName` varchar(150) NOT NULL,
`voyage_streetAddress` varchar(150) NOT NULL,
`voyage_locality` varchar(150) NOT NULL,
`voyage_postalCode` varchar(150) NOT NULL,
`voyage_region` varchar(150) NOT NULL,
`voyage_country` varchar(150) NOT NULL,
`voyage_gallery` text DEFAULT NULL,
`voyage_deleted` tinyint(4) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
及
我试图根据每次航行计算有多少预订,如果没有,则返回0
e、 g:
等等
目前我有以下几点,但似乎不起作用。我目前在预订表中只有一行测试数据,在航行表中只有17次航行
SELECT voyage_name, voyage_id, bookings.booking_voyageID,
COUNT(bookings.booking_voyageID) AS bookingcount
FROM voyages
LEFT JOIN bookings ON voyages.voyage_id = bookings.booking_voyageID
ORDER BY voyage_name asc
如果没有预订,我需要我的SQL查询返回0的计数。我认为计数不足以解决您的问题,因为如果有一行用于航行,它将返回1,而不会返回0
SUM
是您对自定义列的要求
试试这个
SELECT
voyage_id,
bookings.booking_voyageID,
SUM(CASE WHEN bookings.booking_voyageID IS NULL THEN 0 ELSE 1 END) as
bookingcount
FROM
voyages
LEFT JOIN
bookings
ON
voyages.voyage_id = bookings.booking_voyageID
GROUP BY
voyage_id
ORDER BY
voyage_id;
您的WHERE子句过多-将其删除。ON子句条件就足够了。这将按航次名称返回航次计数。遗憾的是,我需要它来计算每次航次的预订数量。谢谢你的帮助!提供:完整的表格创建表格脚本;插入带有一些示例数据的脚本;此数据的所需输出。
SELECT voyage_name, voyage_id, bookings.booking_voyageID,
COUNT(bookings.booking_voyageID) AS bookingcount
FROM voyages
LEFT JOIN bookings ON voyages.voyage_id = bookings.booking_voyageID
ORDER BY voyage_name asc
SELECT
voyage_id,
bookings.booking_voyageID,
SUM(CASE WHEN bookings.booking_voyageID IS NULL THEN 0 ELSE 1 END) as
bookingcount
FROM
voyages
LEFT JOIN
bookings
ON
voyages.voyage_id = bookings.booking_voyageID
GROUP BY
voyage_id
ORDER BY
voyage_id;