MySQL - 尝试计算为活动销售的门票

时间:2011-04-25 09:43:13

标签: mysql sql

我有一个包含两个表的数据库,eventsticketsevents表包含多行事件,每张售出的tickets个票证。

例如,

events
------
id name  capacity
1  Test  10
2  Test2 20
3  Test3 15

tickets
-------
id event_id customer_id
1  1        (value here doesn't matter)
2  1
3  3
4  1
5  3

所以我可以看到已经售出了3张活动#1的门票,0张活动#2门票和2张活动#3门票。

我正在尝试创建一个选择所有事件的查询,以及一个列available,这是事件容量减去售出的票数。

我有这个问题:

SELECT
events.id,
events.name,
events.capacity,
events.capacity - COUNT(tickets.id) AS available
FROM
events
INNER JOIN tickets ON events.id = tickets.event_id

但是,这并不会返回任何尚未售出门票的事件。我认为它可能是联接的类型,但我尝试了各种没有成功的。

我不确定我哪里出错了。

2 个答案:

答案 0 :(得分:2)

你几乎就在那里,只需将inner join更改为left join

SELECT  events.id,
,       events.name
,       events.capacity
,       events.capacity - COUNT(tickets.id) AS available
FROM    events
LEFT JOIN 
        tickets 
ON      events.id = tickets.event_id
group by
        events.id,
,       events.name
,       events.capacity

即使MySQL不需要它,最好在group by子句中明确列出所有非聚合列。

答案 1 :(得分:0)

应该是加入。尝试左连接而不是内连接