MySQL: возможно ли сделать это одним запросом? - PullRequest
3 голосов
/ 19 ноября 2011

Я пытаюсь выполнить две разные суммы в одном запросе.

user   points   date_achieved
-----------------------------
Foo    10       2000-01-01
Foo    20       2011-11-18
Bar    10       2000-01-01
Bar    20       2011-11-15
Bar    30       2011-11-18

1) Всего очков

SELECT user, SUM(points) AS points_total
FROM myTable
GROUP BY user

2) Очков, накопленных за последний месяц

SELECT user, SUM(points) AS points_month
FROM myTable
WHERE date_achieved >= CURRENT_DATE - INTERVAL 1 MONTH
GROUP BY user

Каков наилучший способ добиться этого с помощью одного запроса?

Большое спасибо.

Ответы [ 2 ]

5 голосов
/ 19 ноября 2011

Просто используйте регистр, чтобы подсчитывать баллы только тогда, когда он соответствует вашим критериям.

SELECT 
       user, 
        SUM(points) AS points,
        SUM(case  
            when date_achieved >= (CURRENT_DATE - INTERVAL 1 MONTH) 
            THEN points 
             else 0 END) points_last_Month
FROM myTable
GROUP BY user
1 голос
/ 19 ноября 2011
select
    user,
    sum(points) as points_total,
    sum(
        case
            when date_achieved >= current_date - interval 1 month then points
            else 0
        end
    ) as points_month
from myTable
group by user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...