MySQL выбрать поле из одной таблицы с разными условиями - PullRequest
0 голосов
/ 08 июня 2018

Мне нужна ваша помощь с запросом MySQL.У меня есть одна таблица 'metrics':

create table metrics
(
  guid          binary(16)  not null
    primary key,
  entry_guid    binary(16)  not null,
  customer_guid binary(16)  null,
  metrics       varchar(30) not null,
  value         int         not null,
  `_created`    timestamp   null,
  `_updated`    timestamp   null
);

Итак, я пытаюсь сделать что-то вроде этого:

SELECT t1.entry_guid as entry_guid, SUM(t1.`value`) as last_week, SUM(t2.`value`) as last_month
FROM metrics as t1, metrics as t2
  WHERE t1.`_created` > NOW() - INTERVAL 7 DAY OR t2.`_created` > NOW() - INTERVAL 1 MONTH
GROUP BY t1.entry_guid

Но в результате я получаю идентичный странный результат использования SUM () function

entry_guid                          last_week  last_month
1                                   4613       4613
2                                   207        207
3                                   6003       6003
4                                   9108       9108

Более того, результат функции SUM () странный, потому что у меня есть только 300 строк, и поле 'value' в каждой строке равно 1 , поэтому max sum должна бытьочень мало.

Итак, запрос

SELECT t1.entry_guid as entry_guid, SUM(t1.`value`) as sum
FROM metrics as t1
GROUP BY t1.entry_guid

дает мне

entry_guid                          sum
0x34303535636637643538396665633265  21
0x34313830656231666665393131326635  21
0x34336537663033653963303437356165  1
0x34363061653730313738313263386264  44

Мне нужно получить SUM ('значение') из одной таблицы, но с разнымиусловия.Можете ли вы показать мне, как?Заранее спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

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

SELECT m.entry_guid as entry_guid,
       SUM(CASE WHEN m.`_created` > NOW() - INTERVAL 7 DAY THEN t1.`value` ELSE 0 END) as last_week,
       SUM(CASE WHEN m.`_created` > NOW() - INTERVAL 1 MONTH THEN t2.`value` ELSE 0 END) as last_month
FROM metrics m
GROUP BY m.entry_guid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...