2014-12-05 2 views
0

Так что я понял, как создать отчет, который будет рассчитывать пункты для каждого месяца на основе критерия WHERE как:Как объединить несколько colums в MYSQL Query, который использует COUNT и WHERE

SELECT 
    Year(FROM_UNIXTIME(`tTime1`)) as YEAR, 
    Month(FROM_UNIXTIME(`tTime1`)) as MONTH, 
    Count(*) As BUY_RESULT 
    FROM zupsbackup 
    WHERE Result='BUY' AND tPeriod='60' 
    GROUP BY Year(FROM_UNIXTIME(`tTime1`)), Month(FROM_UNIXTIME(`tTime1`)) 

Это дает результат таблицы как

YEAR|MONTH|BUY_RESULT 

Однако столбец «Результат» имеет 2 возможных значения «ПОКУПАТЬ» и «ПРОДАВАТЬ».

Так что я хочу добавить еще один столбец, в результате так, что она выглядит как

YEAR|MONTH|BUY_RESULT|SELL_RESULT 

Как я могу создать еще один столбец в MYSQL ???

Я попытался UNION, но это добавляет результаты SELL в конец таблицы результатов и не создает дополнительный столбец.

Итак, как мне создать дополнительный столбец, используя предложение WHERE, чтобы добавить RESULT = 'SELL' рядом с существующим столбцом, где RESULT = 'BUY' ?????

Спасибо !!!!!

+0

Может быть IF - КРОМЕ, посмотрите [здесь] (HTTP://dev.mysql.com/doc/refman/5.0/en/if.html) – skobaljic

+0

Просто посмотрите CASE ... – Strawberry

ответ

4

Использование условной агрегации:

SELECT Year(FROM_UNIXTIME(`tTime1`)) as YEAR, Month(FROM_UNIXTIME(`tTime1`)) as MONTH, 
     SUM(Result = 'BUY') As BUY_RESULT, SUM(Result = 'SELL') as SELL_RESULT 
FROM zupsbackup 
WHERE tPeriod = '60' 
GROUP BY Year(FROM_UNIXTIME(`tTime1`)), Month(FROM_UNIXTIME(`tTime1`)); 
0

Простой способ для достижения этой цели является использование подзапрос:

SELECT 
    Year(FROM_UNIXTIME(tTime1)) as YEAR, 
    Month(FROM_UNIXTIME(tTime1)) as MONTH, 
    Count(*) As BUY_RESULT, 
    (
    SELECT 
     COUNT(sub.*) 
    FROM 
     zupsbackup AS sub 
    WHERE 
     sub.Result = 'SELL' and 
     sub.tPeriod = '60' AND 
     Year(FROM_UNIXTIME(sub.tTime1)) = YEAR AND 
     Month(FROM_UNIXTIME(tTime1)) = MONTH 
) AS SELL_RESULT 
FROM 
    zupsbackup 
WHERE 
    Result='BUY' AND 
    tPeriod='60' 
GROUP BY 
    Year(FROM_UNIXTIME(tTime1)), 
    Month(FROM_UNIXTIME(tTime1)) 
Смежные вопросы