首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对多个表使用计数

对多个表使用计数
EN

Stack Overflow用户
提问于 2015-11-09 14:01:07
回答 4查看 65关注 0票数 3

我想数几只不同的羊,我想把它放在一张桌子上。

就像这样;

代码语言:javascript
复制
Ewes | Rams | Lambs
 8   |   5  |  12

我尝试的查询是这样的,但它不起作用;

代码语言:javascript
复制
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;

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-09 14:06:55

我认为你在这里根本不需要FROM

代码语言:javascript
复制
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中,将所有内容保存在单个结果行中。

票数 3
EN

Stack Overflow用户

发布于 2015-11-09 14:04:03

我认为问题是你不需要内部连接,而需要外部连接.

代码语言:javascript
复制
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语句,看看如何处理计数中的空值。

左外接逻辑运算符返回满足第一个(顶部)输入和第二个(底部)输入的联接的每一行。它还返回第一个输入中没有匹配行的第二个输入中的任何行。第二个输入中的不匹配行作为空值返回。如果参数列中不存在连接谓词,则每一行都是匹配行。

票数 1
EN

Stack Overflow用户

发布于 2015-11-09 14:08:10

使用关联子选择来进行计数:

代码语言:javascript
复制
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子句以获取所有农场的计数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33610836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档