mysql
  • count
  • sum
  • 2015-10-17 24 views 0 likes 
    0

    我有這樣的MySQL查詢....MYSQL COUNT和SUM每一種情況下可能

    "SELECT 
    SUM(CASE WHEN ticket_source='bpt' THEN tix_tickets.ticket_price END) AS bpt_money, 
    COUNT(CASE WHEN ticket_source='bpt' THEN 1 END) AS bpt_num, 
    SUM(CASE WHEN ticket_source='door' THEN tix_tickets.ticket_price END) AS door_money, 
    COUNT(CASE WHEN ticket_source='door' THEN 1 END) AS door_num, 
    SUM(CASE WHEN ticket_source='goldstar' THEN tix_tickets.ticket_price END) AS goldstar_money, 
    COUNT(CASE WHEN ticket_source='goldstar' THEN 1 END) AS goldstar_num, 
    COUNT(CASE WHEN ticket_price='0' THEN 1 END) AS free_tix, 
    COUNT(CASE WHEN ticket_price='10' THEN 1 END) AS ten_buck_tix, 
    COUNT(CASE WHEN ticket_price='20' THEN 1 END) AS twenty_buck_tix, 
    COUNT(CASE WHEN ticket_price='25' THEN 1 END) AS twentyfive_buck_tix 
    FROM tix_people,tix_tickets WHERE tix_people.ID=tix_tickets.holder_id GROUP BY ticket_date ORDER BY ticket_date" 
    

    它的偉大工程,但我想在表中使用的每ticket_price而無需分別打電話給他們。我希望每個ticket_source都不需要單獨調用。我想我可以縮短我的代碼,現在做的更好,因爲我擴大了來源和價格的數量。

    +0

    這一切都取決於你想如何拉出數據。如果你想用列數ten_buck_tix來計算它,那麼你必須把它寫出來。 –

    回答

    0

    你必須寫出你想要選擇的列。如果你想嘗試建立一個查詢,你可以這樣做。這裏是你的選擇的一個小重構。我清理了一些case語句只是使用布爾和

    SELECT 
        SUM(CASE WHEN ticket_source='bpt' THEN tix_tickets.ticket_price END) AS bpt_money, 
        SUM(ticket_source='bpt') AS bpt_num, 
        SUM(CASE WHEN ticket_source='door' THEN tix_tickets.ticket_price END) AS door_money, 
        SUM(ticket_source='door') AS door_num, 
        SUM(CASE WHEN ticket_source='goldstar' THEN tix_tickets.ticket_price END) AS goldstar_money, 
        SUM(ticket_source='goldstar') AS goldstar_num, 
        SUM(ticket_price='0') AS free_tix, 
        SUM(ticket_price='10') AS ten_buck_tix, 
        SUM(ticket_price='20') AS twenty_buck_tix, 
        SUM(ticket_price='25') AS twentyfive_buck_tix 
    FROM tix_people 
    JOIN tix_tickets on tix_people.ID=tix_tickets.holder_id 
    GROUP BY ticket_date 
    ORDER BY ticket_date 
    
    +0

    謝謝。已經好多了。有沒有一種方法MySQL可以找出「ticket_source」有多少個值,並自動爲每個票源的價格和結果數量設置一個變量? –

    +0

    沒有。 mysql只會做你告訴它。所以如果你想指定所有免費門票的計數,你必須自己手動進行。據說你可以通過基於價格連接字符串來構建一個查詢......但查詢本身必須指定要撤出的內容,而不能自動執行該操作 –

    相關問題