2013-07-01 3 views
0

Так что у меня есть MySQL заявление так:Добавление столбцов, созданных в mysql?

SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3 
FROM 
(
SELECT username, 
SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`, 
SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`, 
SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`, 
SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`, 
SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3` 
FROM Table1 
GROUP BY username 
ORDER BY `1st places` DESC 
) q, (SELECT @n := 0) n 

Как я могу сложить столбцы, которые я создал называемые, + «2 места» «1-го Места в» + «3-е места» в этом SQL заявление и создать еще один столбец, называемый «итоговой отделкой»? Кажется легким, но я не могу понять это.

+0

Я не совсем понимаю это. 'Рейтинг <4' перекрывается с' rating = 1', а также частично с 'rating <6'. Можете ли вы привести примерные данные с ожидаемым результатом, чтобы посмотреть, что вы хотите сделать? –

+0

, так что я хочу, это точечная система. Пример: скажите, что кто-то помещает 1-й ака «рейтинг = 1», тогда они получают очко за 1-е место, тогда они также получают 5 очков за то, что они попадают в пятерку лучших (ака рейтинг <6), а также получают еще 5 очков за то, что они были в top 3 (ака рейтинг <4), поэтому они получат в общей сложности 11 очков. –

+0

Im понимая, как это глупо это на самом деле сейчас, когда я набрал все это, но я думаю, есть ли способ сделать это? Даже думать об этом, мне не нужно это. –

ответ

1

Вы можете просто добавить их вместе и дать псевдоним, что дополнительные колонки: -

SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3, `1st places` + `2nd places` + `3rd places` AS `total finishes` 
FROM 
(
SELECT username, 
SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`, 
SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`, 
SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`, 
SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`, 
SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3` 
FROM Table1 
GROUP BY username 
ORDER BY `1st places` DESC 
) q, (SELECT @n := 0) n 
+0

wow im so dumb, спасибо много LOL! –

0

Я уверен, что вы не можете повторно использовать поле с вычисленным значением в том же SELECT запросе, однако упаковка в дополнительный подзапрос может быть вариант:

SELECT username, @n := @n + 1 ranking, `1st places`, `2nd places`, `3rd places`, `top5`, `top3 
FROM 
(
    SELECT 
    *, 
    `1st places`+`2nd places`+`3rd places` `total finishes` 
    FROM (
     SELECT username, 
     SUM(CASE WHEN rating = 1 THEN 1 ELSE 0 END) `1st places`, 
     SUM(CASE WHEN rating = 2 THEN 1 ELSE 0 END) `2nd places`, 
     SUM(CASE WHEN rating = 3 THEN 1 ELSE 0 END) `3rd places`, 
     SUM(CASE WHEN rating < 6 THEN 5 ELSE 0 END) `top5`, 
     SUM(CASE WHEN rating < 4 THEN 5 ELSE 0 END) `top3` 
     FROM Table1 
     GROUP BY username 
     ORDER BY `1st places` DESC 
    ) 
) 
q, (SELECT @n := 0) n 

Haven «т пытался, еще ...

Смежные вопросы