Mysql 添加一个新的选择字段

Mysql 添加一个新的选择字段,mysql,Mysql,这是一个mysql问题。 这里有一个简单的表,需要按groupid分组。(只是madeup,除了问题的解决方案之外没有其他用途) id汽车屋宠物组id 1 1 2 1 1 1 0 1 0 1 1 0 0 0 1 按id从表组中选择SUM(汽车)、SUM(房子)、SUM(宠物) 所以结果是 car 1 house 3 pets 1 汽车1家3宠物1 我试图做的是在组“any_record_with_al

这是一个mysql问题。
这里有一个简单的表,需要按groupid分组。(只是madeup,除了问题的解决方案之外没有其他用途)

id汽车屋宠物组id 1 1 2 1 1 1 0 1 0 1 1 0 0 0 1 按id从表组中选择SUM(汽车)、SUM(房子)、SUM(宠物) 所以结果是

car 1 house 3 pets 1 汽车1家3宠物1 我试图做的是在组“any_record_with_all_zero”中插入一个新的选定字段,如果组中有一行car=0 house=0 pets=0,则该字段为0

因此,期望的结果是

car 1,house 3, pets 1, any_record_with_all_zeros = 1 汽车1,房子3,宠物1,所有零=1的任何记录 如果id 3行的任意字段不是0,则“所有为0的任意记录”为0

我知道我应该拥有,但我不知道如何将“any_record…”字段放入所选部分

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 挑选 总和(汽车),总和(房子),总和(宠物),任何记录都是零 从…起 桌子 分组 用户组 如果car=0&&house=0&&pets=0,则比所有0或类似的任何记录都要多
有什么想法吗?

你可以查看汽车+房子+宠物

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
您可以使用聚合函数。如果组中的任何设定值为真,则位_或也将返回真

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

把两个数相加也行

groupid |汽车|房屋|宠物|无 ------: | ---: | -----: | ---: | ---: 1 | 1 | 3 | 1 | 1
DBFIDLE

“结果是
汽车1房子3宠物1
”-你确定吗?请检查表中的
id
值。结果与分组依据不匹配,它将匹配没有分组的总和。同样,拥有这些信息也无助于获得这些信息,你可以用一个案例来计算金额。是的,你是对的。假设id都是1:)。关键是找到一行,其中所有字段均为0,并用0创建一个新字段。我不理解这个问题。问题是以某种方式将分组结果标记为0,如果该组的任何一行的猫、房子和宠物均为0“选择区域只能看到分组值,而不能看到个人”-
位\u或
是一个聚合函数,如SUM、MAX或COUNT。谢谢你,Luk。这样就可以了。@Ninet9 Thx。你甚至可以对它进行编码。例如,
SUM(!(汽车、房子、宠物))
。但是使用
而不是
更容易理解。
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
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
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