所以,我有三张桌子用于销售活动门票的服务:
Event(id)
Ticket(id, venue_id, seller_id)
Venue(id, event_id)
Seller(id)
而且我想检测一下,对于我所拥有的每一个事件,有多少卖家(类型1)只有售票(并且该票据是相应的事件)。像
Event_id; First_time_sellers
2814;3
3092;24
124;1
...
我尝试了两次查询,两次都没有得到错误的结果
SELECT event_id,
COUNT(DISTINCT rookie_seller)
FROM
(SELECT event_id,
rookie_seller,
tickets
FROM
(SELECT DISTINCT event.id AS event_id,
seller.id AS rookie_seller,
COUNT(DISTINCT ticket.id) AS tickets
FROM ticket
JOIN venue ON ticket.venue_id = venue.id
JOIN event ON venue.event_id = event.id
JOIN seller ON ticket.seller_id = seller.id
WHERE seller.type = 1
AND ticket.isforsale = 1
GROUP BY rookie_seller) a
WHERE tickets = 1) b
GROUP BY event_id
和
SELECT event.id,
a.seller_id,
a.tickets
FROM ticket
JOIN (
SELECT seller.id AS seller_id,
COUNT(DISTINCT ticket.id) AS tickets
FROM ticket
JOIN seller ON ticket.seller_id = seller.id
WHERE seller.type = 1
AND ticket.isforsale = 1
GROUP BY seller_id) a ON ticket.seller_id = a.seller_id
JOIN venue ON ticket.venue_id = venue.id
JOIN event ON venue.event_id = event.id
WHERE a.tickets = 1
我真的不确定问题是什么。连接应该没问题,计数的条件也一样,对吧?
感谢您的任何建议:)
答案 0 :(得分:0)
你确实需要一个子查询。但你可以更简单地做到这一点:
SELECT event_id, COUNT(*)
FROM (SELECT s.id, v.event_id, COUNT(*) as numTickets
FROM ticket t JOIN
seller s
ON t.seller_id = s.id JOIN
venue v
ON t.venue_id = v.id
WHERE s.type = 1 AND t.isforsale = 1
GROUP BY s.id
HAVING COUNT(*) = 1
) s
GROUP BY event_id;