是否有必要在这里嵌套一个双COUNT?

时间:2016-12-14 13:20:54

标签: mysql sql

所以,我有三张桌子用于销售活动门票的服务:

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 个答案:

答案 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;
相关问题