Mysql SQL查询:奇怪的求和行为

Mysql SQL查询:奇怪的求和行为,mysql,sum,Mysql,Sum,我正在运行这个查询 SELECT events.*, venues.*, SUM(events.eventCAPACITY) AS capacity, SUM(CASE WHEN bookings.bookingAMOUNT is NULL THEN 0 ELSE bookings.bookingAMOUNT END) AS booked, SUM(events.eventCAPACITY) - SUM(CASE WHEN bookings.bookingAMOUNT i

我正在运行这个查询

SELECT events.*, venues.*,
    SUM(events.eventCAPACITY) AS capacity,
    SUM(CASE WHEN bookings.bookingAMOUNT is NULL THEN 0 ELSE bookings.bookingAMOUNT END) AS booked,
    SUM(events.eventCAPACITY) - SUM(CASE WHEN bookings.bookingAMOUNT is NULL THEN 0 ELSE bookings.bookingAMOUNT END) AS available
FROM events
LEFT JOIN bookings ON events.eventID = bookings.bookingEVENT
LEFT JOIN venues ON venues.venueID = events.eventVENUE
WHERE events.eventDATE >= CURDATE()
GROUP BY events.eventID
ORDER BY events.eventDATE, events.eventTIME ASC
一切顺利。除非通过另一个表达到events.eventCAPACITY例如20,否则它不会给出零,它只给出events.eventCAPACITY中设置的量

我做错了什么

编辑

这是我运行查询得到的结果

事件 事件基准 事件提示 活动地点 事件容量 维努艾德 维努奈姆 容量 预定 可获得的 1. 2021-01-24 12:00:00 1. 15 1. 静脉1 15 0 15 2. 2021-01-24 11:00:00 2. 15 2. 静脉2 15 0 15 3. 2021-01-13 09:00:00 1. 15 1. 静脉1 30 15 15 您不需要events.eventCAPACITY的总和。联接可能会创建重复的值,如果要使用GROUP_CONCATevents.eventCAPACITY,您可以看到这些值

这里的解决方案是将events.eventCAPACITY的和去掉

您不需要events.eventCAPACITY的总和。联接可能会创建重复的值,如果要使用GROUP_CONCATevents.eventCAPACITY,您可以看到这些值

这里的解决方案是将events.eventCAPACITY的和去掉


您所说的事件容量已达到是什么意思?你的意思是容量和预订量相等吗?你指的是可用资产的价值吗?您认为哪些是容量和预订,哪些是可用的?您在聚合中看到的任何不规则情况都可能是由于您在选择列表中有许多列,而这些列也不在GROUP BY中。MySQL在较新的版本中默认具有宽松的行为,允许您使用GROUP by events.eventID,而不需要GROUP by events.eventID、events.somethingElse、Vincements.venueID等-无需查看原始表中的样本或输出样本,我对你的分组非常怀疑。你应该发布一个参与此查询的具有代表性的表的小样本,连同1个这些样本行现在生成的结果和2个与你期望的结果完全相同的结果。添加了更多的信息、表和结果。你为什么要在events.eventCAPACITY上使用SUM?你不是按事件ID分组吗?所以,eventCAPACITY应该只有一个需要的值,不需要求和。您所说的eventCAPACITY已经达到是什么意思?你的意思是容量和预订量相等吗?你指的是可用资产的价值吗?您认为哪些是容量和预订,哪些是可用的?您在聚合中看到的任何不规则情况都可能是由于您在选择列表中有许多列,而这些列也不在GROUP BY中。MySQL在较新的版本中默认具有宽松的行为,允许您使用GROUP by events.eventID,而不需要GROUP by events.eventID、events.somethingElse、Vincements.venueID等-无需查看原始表中的样本或输出样本,我对你的分组非常怀疑。你应该发布一个参与此查询的具有代表性的表的小样本,连同1个这些样本行现在生成的结果和2个与你期望的结果完全相同的结果。添加了更多的信息、表和结果。你为什么要在events.eventCAPACITY上使用SUM?你不是按事件ID分组吗?所以,eventCAPACITY只需要一个值,您不需要求和。非常感谢。关于这件事,我还有很多要学。非常感谢。关于这一点,我还有很多东西要学。
SELECT events.*, venues.*,
    events.eventCAPACITY AS capacity,
    SUM(CASE WHEN bookings.bookingAMOUNT is NULL THEN 0 ELSE bookings.bookingAMOUNT END) AS booked,
    events.eventCAPACITY - SUM(CASE WHEN bookings.bookingAMOUNT is NULL THEN 0 ELSE bookings.bookingAMOUNT END) AS available
FROM events
LEFT JOIN bookings ON events.eventID = bookings.bookingEVENT
LEFT JOIN venues ON venues.venueID = events.eventVENUE
WHERE events.eventDATE >= CURDATE()
GROUP BY events.eventID
ORDER BY events.eventDATE, events.eventTIME ASC