- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能是一个相对简单的问题,但我正在努力解决它。我有下面列出的三个表(owners、pets、petTypes
),并尝试在一个查询中提取以下数据。前两个并不难,但第三个和第四个是我遇到困难的地方。
如果要复制表数据:https://pastebin.com/veXHwcMc
问题:
所有者 ID
所有者姓名
我尝试过的
选择最大的年龄SELECT MAX(age) FROM pets
连接表格以显示SELECT pets.ownerId, MAX(pets.age), petTypes.name FROM pets INNER JOIN petTypes ON pets.petTypeId = petTypes.id GROUP BY pets.ownerId;
但这是错误的。因为当他们应该显示最老的猫的正确名字时,他们都显示了猫。
我想到了这个问题:How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?
所以我尝试:SELECT petTypes.id, petTypes.name FROM petTypes INNER JOIN (SELECT MAX(age) FROM pets GROUP BY OwnerId) pets ON petTypes.id = pets.petTypeId;
但抛出的错误是ERROR 1054 (42S22): Unknown columns 'petTypes.id' in 'on Clause'
请帮忙
最佳答案
SELECT O.ID, O.FirstName, O.LastName, P.Age, min(PT.Name) as TypeName, OPets.CntOfOtherPets
FROM Owners O
INNER JOIN (SELECT OwnerID, max(Age) MA, count(*)-1 as CntOfOtherPets
FROM Pets
GROUP BY OwnerID) OPets
on OPets.OwnerID = O.ID
INNER JOIN Pets P
on P.Age = OPets.MA
and P.OwnerID = OPets.OwnerID
INNER JOIN PetTypes PT
on P.PetTypeID = PT.ID
GROUP BY O.ID, O.FirstName, O.LastName, P.Age, OPets.CntOfOtherPets ;
派生表 OPets 得到所有者所有宠物的计数减去 1,因为我们知道这代表“其他宠物”计数。最大宠物年龄通过聚合分组所有者返回。通过将此数据集重新加入到宠物集中,我们只能得到该主人具有最大年龄的宠物。然后我们加入 petType 来获取该类型宠物的名称(如果多个宠物的最大年龄相同,则为宠物)。
最后,按除 PT.Name 之外的所有字段进行分组,然后选择 min(PetType.Name)。这样,如果存在多种具有相同最古老年龄的动物,我们会按字母顺序选择 TypeName 名称最早的动物。此方法仅在返回数据的情况下有效。如果必须返回宠物名称或宠物 ID,则需要采用不同的方法;但这是迄今为止最简单的方法,给出了所需的结果(返回的列)
count-1 似乎有点黑客,因为 count(*) 返回所有宠物的计数 -1 只是减去我们知道满足 #5 要求的 1:其他 宠物。即使在年龄相关的情况下,这个 # 也是正确的。因为 count-1 永远是“其他宠物”
关于mysql - 从列中选择最大值并从另一列中选择相应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47228127/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!