2016-12-14 4 views
1

Also, ich habe drei Tabellen für einen Dienst, Tickets für Veranstaltungen verkauft:Ist es notwendig, hier ein Double COUNT zu verschachteln?

Event(id) 
Ticket(id, venue_id, seller_id) 
Venue(id, event_id) 
Seller(id) 

Und ich möchte für jedes Ereignis erfassen, die ich habe, wie viele Verkäufer (Typ 1) gibt, die haben nur Ticket zum Verkauf (und damit das Ticket zum entsprechenden Event gehört). Wie

Event_id; First_time_sellers 
2814;3 
3092;24 
124;1 
... 

Ich habe dies mit zwei Abfragen versucht, beiden Fehler immer zu falschen Ergebnissen

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 

und

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 

Ich bin wirklich nicht sicher, was das Problem ist. die Verbindungen sollten in Ordnung sein, und die Bedingungen auf der Zählung auch, richtig?

Danke für jeden Ratschlag :)

+1

Bitte geben Sie Ihre Beispieldaten, das Ergebnis erhalten Sie und erwartete Daten – Viki888

Antwort

0

Sie tun dies eine Unterabfrage benötigen. Aber Sie können es einfacher tun:

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; 
Verwandte Themen