2017-03-26 1 views
0

Ich muss die folgende Ausgabe mit MySQL produzieren, die die gesamten verfügbaren Tickets berechnen kann und die gesamten Tickets verkauft für jede Veranstaltung;Wie berechnet man die Gesamtzahl der verfügbaren Tickets und die Gesamtzahl der verkauften Tickets mit MySQL?

event_id event_name  start_date tickets_available tickets_sold 
------------------------------------------------------------------------- 
1   Test Event 1 2017-04-01 200     20 
2   Test Event 2 2017-04-25 100     30 

Meine Tabellen sind wie folgt;

Tabelle: Veranstaltungen

event_id user_id event_name  start_date event_active 
------------------------------------------------------------------------- 
1   47   Test Event 1 2017-04-01 0     
2   47   Test Event 2 2017-04-25 0 

Tabelle: ticket_types

ticket_type_id event_id ticket_type quantity_released quantity_remaining 
--------------------------------------------------------------------------- 
1    1   General  100    90 
2    1   VIP   100    90 
3    2   General  50    30 
4    2   VIP   50    40 

Abfrage meine SQL Hier ist so weit;

SELECT events.event_id, events.event_name, events.start_date, events.event_active, 
(
    SELECT SUM(ticket_types.quantity_released) 
    FROM ticket_types 
    WHERE ticket_types.event_id = events.event_id 
) AS tickets_available, 
(
    SELECT (ticket_types.quantity_released - ticket_types.quantity_remaining) 
    FROM ticket_types 
    WHERE ticket_types.event_id = events.event_id 
) AS tickets_sold 
FROM events 
INNER JOIN ticket_types 
ON events.event_id=ticket_types.event_id 
WHERE user_id = 47; 

Doch dies funktioniert nicht wie die Logik für die Spalten tickets_available und tickets_sold ist falsch.

Kann mir bitte jemand mit dieser Frage helfen?

Antwort

2
SELECT EVENTS.EVENT_ID 
    , EVENTS.EVENT_NAME 
    , EVENTS.START_DATE 
    , SUM(TICKET_TYPES.QUANTITY_RELEASED) AS TICKETS_AVAILABLE 
    , SUM(TICKET_TYPES.QUANTITY_RELEASED) - SUM(TICKET_TYPES.QUANTITY_REMAINING) AS TICKETS_SOLD 
FROM EVENTS 
    INNER JOIN TICKET_TYPES 
     ON EVENTS.EVENT_ID = TICKET_TYPES.EVENT_ID 
GROUP BY EVENTS.EVENT_ID 
    , EVENTS.EVENT_NAME 
    , EVENTS.START_DATE; 
+0

Dank für die Hilfe, Ihre Abfrage funktioniert super! – forseth31

0

Dies ist nicht wirklich gut formatiert aufgrund meiner mangelnden Kenntnisse in SQL-Formatierung, aber das könnte Ihre Lösung sein.

SELECT events.event_id, 
     events.event_name, 
     events.start_date, 
     events.event_active, 
     SUM(ticket_types.quantity_released) AS available, 
     SUM(ticket_types.quantity_released) - SUM(ticket_types.quantity_remaining) AS sold 
FROM events 
INNER JOIN ticket_types 
ON events.event_id = ticket_types.event_id 
GROUP BY events.event_id 
WHERE user_id = 47; 
Verwandte Themen