Mysql sql—按平均范围为第二个表选择第一个表中具有外键的项的ID
我有一个牛棚数据库,它有两个表:Mysql sql—按平均范围为第二个表选择第一个表中具有外键的项的ID,mysql,Mysql,我有一个牛棚数据库,它有两个表: 放置牛的位置(牛id、块id) 奶牛详细信息(昵称、奶牛id、年龄)奶牛月龄 _cow的表位置_是这样创建的: CREATE TABLE place_of_cow ( block_id INT NOT NULL, cow_id INT NOT NULL, FOREIGN KEY cow_detailsFK (cow_id) REFERENCES cow_details (cow_id) ON DELETE CA
CREATE TABLE place_of_cow (
block_id INT NOT NULL,
cow_id INT NOT NULL,
FOREIGN KEY cow_detailsFK (cow_id)
REFERENCES cow_details (cow_id)
ON DELETE CASCADE
ON UPDATE NO ACTION
);
CREATE TABLE cow_details (
cow_id INT NOT NULL,
nickname CHAR(25) NOT NULL,
age INT NOT NULL,
CONSTRAINT cow_detailsPK PRIMARY KEY (cow_id)
);
我插入的值是:
INSERT INTO place_of_cow
VALUES (1, 1), (1, 5), (1, 6), (2, 2), (2, 7), (3, 3), (4, 4), (4, 8), (4, 9);
INSERT INTO cow_details
(cow_id,nickname,age)
VALUES
(1,'hedva',16),
(2,'tali',16),
(3,'cow3',14),
(4,'cow4',9),
(5,'cow5',16),
(6,'cow6',7),
(7,'cow7',4),
(8,'cow8',5),
(9,'cow9',9),
(10,'cow10',7),
(12,'cow12',3),
(13,'cow13',1),
(14,'cow14',1),
(15,'cow15',20),
(16,'cow16',22);
表cow_详细信息是这样创建的:
CREATE TABLE place_of_cow (
block_id INT NOT NULL,
cow_id INT NOT NULL,
FOREIGN KEY cow_detailsFK (cow_id)
REFERENCES cow_details (cow_id)
ON DELETE CASCADE
ON UPDATE NO ACTION
);
CREATE TABLE cow_details (
cow_id INT NOT NULL,
nickname CHAR(25) NOT NULL,
age INT NOT NULL,
CONSTRAINT cow_detailsPK PRIMARY KEY (cow_id)
);
我插入的值是:
INSERT INTO place_of_cow
VALUES (1, 1), (1, 5), (1, 6), (2, 2), (2, 7), (3, 3), (4, 4), (4, 8), (4, 9);
INSERT INTO cow_details
(cow_id,nickname,age)
VALUES
(1,'hedva',16),
(2,'tali',16),
(3,'cow3',14),
(4,'cow4',9),
(5,'cow5',16),
(6,'cow6',7),
(7,'cow7',4),
(8,'cow8',5),
(9,'cow9',9),
(10,'cow10',7),
(12,'cow12',3),
(13,'cow13',1),
(14,'cow14',1),
(15,'cow15',20),
(16,'cow16',22);
我试图显示表中的所有区块id,其中每个区块id中的奶牛的平均年龄超过10个月。
我尝试了以下代码:
select distinct p.block_id from place_of_cow as p
where exists
(
select c.cow_id from cow_details as c where c.cow_id = p.cow_id
group by c.cow_id having avg(c.age) > 10
);
但结果是:
块id:1
2
3 块_id 2不应出现在结果中。我做错了什么?试试这个:
select p.block_id
from place_of_cow p
inner join cow_details d on p.cow_id = d.cow_id
group by p.block_id
having avg(d.age) > 10
您需要在block\u id
上分组,而不是在cow\u id
上分组,因为必须针对块而不是cow进行聚合
别担心,你就快到了。