2017-03-26 4 views
0

MySQLを使用して以下の出力を生成する必要があります。これは利用可能なチケットの合計と各イベントで販売されたチケットの合計を計算できます。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 

マイテーブルは次のとおりです。

表:イベント

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 

表:

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 

をticket_typesここに私のSQLクエリは、これまでです。

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; 

tickets_availableとtickets_sold列のためのロジックが間違っているようしかし、これは動作しません。

このクエリで私を助けてもらえますか?

答えて

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

助けてくれてありがとう、あなたのクエリが素晴らしい働いています! – forseth31

0

これは、SQLフォーマットの知識が不足しているために実際にはフォーマットされていませんが、これがあなたの解決策である可能性があります。

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; 
関連する問題