我想按所有负面的价值和所有积极的价值进行分组,任何想法如何做到这一点?
答案 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