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

SQL查询到Count()多个表

司马洲
2023-03-14
问题内容

我有一个表,它与其他表具有多个一对多的关系。假设主表是一个人,其他表则代表宠物,汽车和儿童。我想要一个查询,该查询返回人员的详细信息,他们拥有的宠物,汽车和儿童的数量,例如

Person.Name   Count(cars) Count(children) Count(pets)

John Smith    3           2               4
Bob Brown     1           3               0

做这个的最好方式是什么?


问题答案:

子查询分解(9i +):

WITH count_cars AS (
    SELECT t.person_id
           COUNT(*) num_cars
      FROM CARS c
  GROUP BY t.person_id),
     count_children AS (
    SELECT t.person_id
           COUNT(*) num_children
      FROM CHILDREN c
  GROUP BY t.person_id),
     count_pets AS (
    SELECT p.person_id
           COUNT(*) num_pets
      FROM PETS p
  GROUP BY p.person_id)
   SELECT t.name,
          NVL(cars.num_cars, 0) 'Count(cars)',
          NVL(children.num_children, 0) 'Count(children)',
          NVL(pets.num_pets, 0) 'Count(pets)'
     FROM PERSONS t
LEFT JOIN count_cars cars ON cars.person_id = t.person_id
LEFT JOIN count_children children ON children.person_id = t.person_id
LEFT JOIN count_pets pets ON pets.person_id = t.person_id

使用内联视图:

   SELECT t.name,
          NVL(cars.num_cars, 0) 'Count(cars)',
          NVL(children.num_children, 0) 'Count(children)',
          NVL(pets.num_pets, 0) 'Count(pets)'
     FROM PERSONS t
LEFT JOIN (SELECT t.person_id
                  COUNT(*) num_cars
             FROM CARS c
         GROUP BY t.person_id) cars ON cars.person_id = t.person_id
LEFT JOIN (SELECT t.person_id
                  COUNT(*) num_children
             FROM CHILDREN c
         GROUP BY t.person_id) children ON children.person_id = t.person_id
LEFT JOIN (SELECT p.person_id
                  COUNT(*) num_pets
             FROM PETS p
         GROUP BY p.person_id) pets ON pets.person_id = t.person_id


 类似资料:
  • 问题内容: 我想同时计算一个表中的记录总数和符合某些条件的记录总数。我可以使用两个单独的查询来完成这些操作: 有没有一种方法可以将它们组合成一个查询,以便在一行中得到两个字段? 如果没有,我可以发出两个查询并将它们包装在一个事务中,以便它们保持一致,但是我希望使用一个查询来完成。 编辑:我最关心原子性;如果需要两个子SELECT语句就可以,只要某个地方有INSERT,它就不会使两个响应不一致。 编

  • 问题内容: 桌子: 我的查询: 我收到“ MySQL子查询返回多个行”错误。 我知道此查询可以使用以下查询的解决方法: 然后使用php循环遍历结果并执行以下查询以获取和回显它: 但是我认为可能会有更好的解决方案? 问题答案: 简单的解决方法是在子查询中添加一个子句: 一个更好的选择(就性能而言)是使用联接:

  • 我现在在大学学习数据库,在我的项目中,我有3个表:、和 联赛(leagueId,leagueName) 团队(teamId,teamName) 具有(leagueId,teamId,year)

  • 我想知道如何编写这个查询。 我知道这个实际的语法是假的,但它会帮助你理解我想要什么。我需要它的这种格式,因为它是一个大得多的查询的一部分。 我需要这所有返回在一个查询。 此外,它需要在一行中,因此以下操作将不起作用:

  • 问题内容: 使用表i以及date_entered和code字段,我编写了一个查询以列出代码=‘12A’的每一年的计数。 这将产生: 我想在结果集中包括Cnt变量的总和。我知道如何使用单独的查询来找到总和,但是我想在原始查询中计算总和。 问题答案: 在该子句之后添加到查询中,您将获得一个额外的行,其中包含您的最终总数的NULL年。

  • 问题内容: 假设我有两个表,并且 我想在一个查询中将来自某些输入的数据插入到表中,该怎么做? 请,如果可以做到,请解释语法。 问题答案: MySQL不支持在单个INSERT语句中进行多表插入。奇怪的是,Oracle是我所知道的唯一一个…