根据不同的标准选择查询

时间:2014-09-15 22:22:14

标签: mysql

让我们说我的桌子看起来像下面的那张桌子。我想根据两个标准查询表。 如果id的计数为负数,我希望根据该ID获得最大结果。此外,如果一个id只有正数而不是我想根据该id得到min。

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

1 个答案:

答案 0 :(得分: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()的用途:如果数字的绝对值的最小值等于数字的最小值,那么number是正数(因为只有当min(tcount)大于零或等于零时才会发生),在其他情况下,数字为负数。