2016-12-14 33 views
1

所以,我对于销售门票的活动服务三个表:是否需要在这里嵌套两个COUNT?

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 

我真的不知道是什么问题。加入应该没问题,还有计数条件,对不对?

感谢您的任何忠告:)

+1

请提供您的样本数据,您得到的结果和预期的数据 – Viki888

回答

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;