2015-10-17 7 views
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

Вы должны указать, какие столбцы вы хотите выбрать. если вы хотите попытаться построить запрос, вы можете это сделать. вот небольшой рефактор вашего выбора. Я очистил некоторые из заявлений дела, чтобы просто использовать логическую сумму

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 делает то, что вы ему рассказываете. поэтому, если вы хотите указать счет для всех бесплатных билетов, вам придется вручную сделать это самостоятельно. что, как говорится, вы можете построить запрос, объединив строки, основанные на ценах ... но сам запрос должен указать, что вытащить и не может сделать это автоматически –