这是一个mysql问题。
这是一个简单的表,需要按groupid进行分组。(只是组成,除了解决问题外没有其他用途)
id car house pets groupid 1 1 2 1 1 1 0 1 0 1 1 0 0 0 1
SELECT SUM(car),SUM(house),SUM(pets) FROM table GROUP BY id
所以结果是
car 1 house 3 pets 1
我要尝试的是向组“ any_record_with_all_zeros”中插入一个新的选定字段,如果该组有一行,其中car = 0房屋= 0宠物= 0,则为0
所以期望的结果是
car 1,house 3, pets 1, any_record_with_all_zeros = 1
如果id 3行的any字段不是0,则'any_record_with_all_zeros为0'
我知道即时通讯应该与HAVING一起使用,但是我不知道如何将“ any_record ...”字段放入SELECT部分。
SELECT SUM(car),SUM(house),SUM(pets),any_record_with_all_zeros FROM table GROUP BY groupid HAVING if car=0 && house=0 && pets=0 than any_record_with_all_zeros = 0 or something similar
有什么主意吗?
答案 0 :(得分:1)
您可以检查汽车,房屋和宠物
SELECT
SUM(car)
,SUM(house)
,SUM(pets)
, sum (case when (car + house + pets) = 0 then 1 else 0 end) any_record_with_all_zeros
FROM table
GROUP BY groupid
答案 1 :(得分:1)
您可以使用BIT_OR()
聚合函数。如果来自组的任何设置值都为TRUE,则BIT_OR也将返回TRUE。
SELECT groupid
, SUM(car)
, SUM(house)
, SUM(pets)
, BIT_OR((car, house, pets) = (0, 0, 0)) as any_record_with_all_zeros
FROM `table`
GROUP BY groupid
答案 2 :(得分:1)
总结几个Bitwise OR的NOT也是可以的。
create table `table` ( id int primary key auto_increment, groupid int not null, car int not null default 0, house int not null default 0, pet int not null default 0 );
insert into `table` (groupid, car, house, pet) values (1, 1, 2, 1) ,(1, 0, 1, 0) ,(1, 0, 0, 0) -- ,(1, 0, 0, 0) -- ,(1, 0, 0, 0) ;
SELECT groupid, SUM(car) as cars, SUM(house) as houses, SUM(pet) as pets, SUM(not(car | house | pet)) as none FROM `table` GROUP BY groupid
groupid | cars | houses | pets | none ------: | ---: | -----: | ---: | ---: 1 | 1 | 3 | 1 | 1
db <>提琴here