当前位置: 首页 > 面试题库 >

SQL-左联接分组依据

柳钟展
2023-03-14
问题内容

我有两张桌子。表A列出了员工姓名。表B是一个复杂的表,其中包含有关员工打来的电话的信息。

我的目标是制作一个包含“名称”和“
callCount”列的表。我的目标是“左加入”和“分组依据”,但是我一直想念没有打过电话的员工。我怎样才能只保留名称并在其中放置零?

也许我很亲密,有人可以指出我的错字吗?在此先感谢您的帮助,以下是SQL:

SELECT A.name, COUNT(B.call_id) AS 'outgoing call count' 
FROM EmployeeTable A 
LEFT JOIN CallTable B 
ON A.name = B.call_from_name
WHERE B.call_type LIKE 'outgoing' 
AND B.voice_mail = '0' 
...
GROUP BY A.name

问题答案:

这是一个JOIN而非NULL问题:您的过滤器正在将OUTER更改为INNER
JOIN。这意味着在CallTable(B)中有行的位置仅获得COUNT,而不是您想要的OUTER JOIN。

SELECT A.name, COUNT(B.call_id) AS 'outgoing call count' 
FROM
   EmployeeTable A 
   LEFT JOIN
   (
   SELECT call_from_name, call_id FROM CallTable
   WHERE call_type LIKE 'outgoing' 
     AND voice_mail = '0'
     AND /* other CallTable filters */
   ) B
   ON A.name = B.call_from_name
WHERE
     /* only EmployeeTable A filters */
GROUP BY A.name

编辑:在其他地方发表评论后,您对B的所有过滤器都必须在派生表中,而不是在外部位置。



 类似资料:
  • 问题内容: 我正在尝试创建一个更新查询,并且在获取正确的语法方面进展甚微。以下查询正在运行: 它创建一个三元组的列表Index1,Index2,EventCounts。仅在t.SpecialEventCount为NULL的情况下才这样做。我尝试编写的更新查询应将此SpecialEventCount设置为该计数,即上述查询中的COUNT(m.EventType)。此数字可以是0或任何正数(因此为左联

  • 我有3张表<br>Tbcodetable<br> Tbmember TB存款< br > 我想在一个查询中查询每个sato的资本和储蓄的总和 我能做的最好的查询是 这给了我这个结果。 这只给了我资本的总和(我迷失了如何包括储蓄和资本的结果),它不包括那牙地区 。 我可以通过employeeno连接tbmember和tbdeposit,但是我不知道如何在结果集中分离资本和储蓄的总和 编辑< br >

  • 我使用SQL API在Azure Cosmos DB集合中使用JOIN查询文档。 我有两个联系文件,一个是有财产地址的,另一个是没有地址的。 我需要得到所有人的地址列表(包括没有任何地址的人)。我已经使用下面的查询来执行此操作。但它给出了有地址的人名单。 实际产出:

  • 我有一个表'gems'在那里存储帖子(例如blog)。对帖子的回复也存储在同一个表中,其中有一个字段存储父帖子的密钥。每个帖子都可以附上文件。 我需要得到一个与相关的回复和附加文件的帖子列表。因此“gems”有多个左联接--一个连接到它自己,一个连接到带有文件名的“gemdetail”。此查询有效: 但是,如果我每个帖子有20个回复和10个文件,那么返回的记录数是每个帖子200条。限制条款起作用,

  • 问题内容: 我有两个包含“任务”和“注释”的表,并且想要检索一个任务列表,以及每个任务的关联注释数。这两个查询可以完成任务: 它们之间有区别吗?我应该在一个之上使用另一个,还是它们只是完成同一工作的两种方式?谢谢。 问题答案: 在小型数据集上,当涉及到性能时,它们会被淘汰。索引时,LOJ会好一些。 我发现在大型数据集上,内部联接(内部联接也将起作用。)将在很大的因素(抱歉,没有数字)方面优于子查询

  • 问题内容: 我知道SQL Server中的联接。 例如。有两个表Table1,Table2。 它们的表结构如下。 表1的数据如下: 表2数据如下: 如果我执行下面提到的两个SQL语句,则两个输出将是相同的 请在上述SQL语句中说明左右联接之间的区别。 问题答案: Select * from Table1 left join Table2 … 和 确实是完全可以互换的。但是,请尝试(或同一对)进行区