MySql,如何在正面或负面的选择查询中进行分组?

时间:2011-01-25 17:00:01

标签: sql mysql group-by

我想按所有负面的价值和所有积极的价值进行分组,任何想法如何做到这一点?

5 个答案:

答案 0 :(得分:11)

GROUP BY SIGN(字段)应该有效。

答案 1 :(得分:5)

SELECT SUM(CASE WHEN SomeColumn < 0 THEN 1 ELSE 0 END) AS negative_values,
       SUM(CASE WHEN SomeColumn >=0 THEN 1 ELSE 0 END) AS non_negative_values
    FROM YourTable

答案 2 :(得分:2)

到目前为止,Stefan的解决方案看起来是最好的答案。如果您希望将0与正数分组,则可以使用

GROUP BY `field` >= 0

答案 3 :(得分:1)

尝试这样的事情:

select count(*), IF(foo >= 0, "pos", "neg") as sign  from test group by sign;

其中foo是具有正值或负值的列

编辑:如果您希望零值与正面和负面区别对待,Stefan的解决方案会更优雅,更好。

答案 4 :(得分:0)

我知道这个问题很久以前就有人问过了,但它可能会对未来的人有所帮助。 注意:下面是在 SQL Server 中测试的,我相信同样的逻辑也适用于 MySql。

    declare @temp table(
    id int,
    amount decimal(18,2),
    rate decimal(18,2),
    isPositiveAmount bit,
    isPositiveRate bit
)

insert into @temp values(1, 100.1, 12.3, null, null)
insert into @temp values(1, -1, -1, null, null)
insert into @temp values(2, 100.1, 12.32, null, null)

update @temp set isPositiveAmount = iif(amount >= 0, 1, 0), isPositiveRate = iif(rate >= 0, 1, 0)

select id, sum(amount), avg(rate), isPositiveAmount, isPositiveRate from @temp
group by id, isPositiveAmount, isPositiveRate