2013-08-28 2 views
2

OK У меня есть столбец с W или L, чтобы обозначить выигрыш или потерю. Я хочу считать все победы и потери и получить процент выигрыша.Simple MySQL Issue

SELECT banner_name, count(win_loss) as wins 
FROM drop_log 
where win_loss = 'W' 
group by banner_name 

Это дает мне все команды и сколько выигрышей у них есть. Как бы я настроить его, чтобы иметь другой столбец для потерь, а другой для отношения. MySQL, как представляется, имеют различные правила синтаксиса, чем SQL Server 2008.

+1

Просто предложение, я бы рекомендовал использовать целое число вместо строки для обозначения выигрыша или потери. Это намного быстрее и эффективнее. Также, какой язык вы используете для взаимодействия с MySQL? –

+1

Вы ошибаетесь, что ваш запрос дает вам много побед. Это дает вам, сколько игр они играли - 'count (win_loss)' учитывает как выигрыши, так и потери. – Barmar

+0

ДБ был сделан другим парнем; Я просто помогаю. Вид слепых, ведущих слепых здесь lol – user2588088

ответ

6
SELECT banner_name, SUM(IF(win_loss = "W", 1, 0)) AS wins, 
    SUM(IF(win_loss = "L", 1, 0)) AS losses 
FROM drop_log 
GROUP BY banner_name 

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

Было бы лучше использовать логическое значение (0 или 1), чтобы обозначить выигрыш или потерю, но это будет работать практически так же.

EDIT: На самом деле было бы просто использовать SUM(win_loss = 'letter'), так как это вернет 1 или 0.

+0

Вау быстрый ответ:) Спасибо за помощь. – user2588088

+1

+1, но было бы лучше использовать одиночные кавычки для строк. –

+1

@BillKarwin Почему? Они оба разрешены. Это ANSI? – Barmar

1

Это даст вам все 3 значения, которые вы хотите.

SELECT banner_name, wins, total-wins AS losses, wins/total AS win_ratio 
FROM (select banner_name, SUM(win_losses = 'W') AS wins, COUNT(*) AS total 
     FROM drop_log 
     GROUP BY banner_name) w