2014-09-15 4 views
0

Допустим, у меня есть таблица, которая выглядит как внизу. Я хочу запросить таблицу на основе двух критериев. Если у id есть отрицательный счетчик, я хочу получить максимальные результаты на основе этого идентификатора. Также, если идентификатор имеет только положительные числа, чем я хочу получить мин на основе этого идентификатора.выберите запрос, основанный на разных критериях

id   tcount 
---  ------ 
1   -5 
1   -10 
1   5 
2   20 
2   30 
3   -40 
3   -50 

Так что результаты, которые я хотел бы, чтобы это

id   tcount 
--   ----- 
1   -5 
2   20 
3   -40 

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

SELECT id, max(count) as tcount 
FROM atable 
WHERE count < 0 
GROUP by id 
+0

Ах! поэтому вы хотите получить более близкое к нулю количество! (взял меня на то, чтобы понять это) – Barranka

ответ

1

Давайте посмотрим если это сработает. Для того, чтобы получить минимальный/максимальный отрицательный и минимальный/максимальный положительный, case ... end может помочь вам:

select id 
    , min(case when tcount < 0 then tcount end) -- Minimum negative 
    , max(case when tcount < 0 then tcount end) -- Maximum negative 
    , min(case when tcount >= 0 then tcount end) -- Minimum non-negative 
    , max(case when tcount >= 0 then tcount end) -- Maximum non-negative 
    , min(tcount) 
    , max(tcount) 
from atable 
group by id; 

После повторного прочтения вашего вопроса (взял меня два или три чтения), я понял, что вы хотите число, которое ближе к нулю для каждой группы. Итак:

select id 
    , min(abs(tcount)) * if(min(tcount) = min(abs(tcount)), 1, -1) 
from atable 
group by id; 

Объяснение:

min(abs(tcount)) Виль получить минимум абсолютного значения tcount (то есть тот, который ближе всего к нулю). Остается только получить правильный знак для числа, и это то, что соответствует if(): если минимум абсолютного значения числа равен минимуму числа, то число положительно (потому что это может если min(tcount) больше нуля или равно нулю), в другом случае число отрицательно.

+0

Я получаю как 6 разных столбцов. Возможно ли это получить? – user3768541

+0

проверить редактирование (новое решение появилось у меня в голове) – Barranka

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