我想数几只不同的羊,我想把它放在一张桌子上。
就像这样;
Ewes | Rams | Lambs
8 | 5 | 12我尝试的查询是这样的,但它不起作用;
SELECT COUNT(e.EweID) AS 'Ewe', COUNT(r.RamID) AS 'Ram', COUNT(l.LambID) AS 'Lamb'
FROM Sheep s
INNER JOIN Ewe e ON s.SheepID = e.EweID
INNER JOIN Ram r ON s.SheepID = r.RamID
INNER JOIN Lamb l ON s.SheepID = l.LambID
WHERE s.FarmerID = '123'我不明白我做错了什么,这是我的数据库ERD;

发布于 2015-11-09 14:06:55
我认为你在这里根本不需要FROM:
select
(select count(*) from Ram where Famerid = 123) as RamCount,
(select count(*) from Ewe where Famerid = 123) as Count,
(select count(*) from Lamb where Famerid = 123) as LambCount(您正在计数的行之间没有关系,请不要尝试并创建一个行。相反,分别计算每一项,将其全部包装在外部select中,将所有内容保存在单个结果行中。
发布于 2015-11-09 14:04:03
我认为问题是你不需要内部连接,而需要外部连接.
SELECT COUNT(CASE WHEN e.EweID IN NOT NULL THEN e.EweID ELSE 0 END) AS 'Ewe', COUNT(r.RamID) AS 'Ram', COUNT(l.LambID) AS 'Lamb'
FROM Sheep s
LEFT OUTER JOIN Ewe e ON s.SheepID = e.EweID
LEFT OUTER JOIN Ram r ON s.SheepID = r.RamID
LEFT OUTER JOIN Lamb l ON s.SheepID = l.LambID
WHERE s.FarmerID = '123'甚至看一下我在第一个计数(Ewe)中添加的case语句,看看如何处理计数中的空值。
左外接逻辑运算符返回满足第一个(顶部)输入和第二个(底部)输入的联接的每一行。它还返回第一个输入中没有匹配行的第二个输入中的任何行。第二个输入中的不匹配行作为空值返回。如果参数列中不存在连接谓词,则每一行都是匹配行。
发布于 2015-11-09 14:08:10
使用关联子选择来进行计数:
SELECT (select COUNT(*) from Ewe e where s.SheepID = e.EweID) AS 'Ewe',
(select COUNT(*) from Ram r where s.SheepID = r.RamID) AS 'Ram',
(select COUNT(*) from Lamb l where s.SheepID = l.LambID) AS 'Lamb'
FROM Sheep s
WHERE s.FarmerID = '123'您也可以简单地删除WHERE子句以获取所有农场的计数。
https://stackoverflow.com/questions/33610836
复制相似问题