【问题标题】:SQL Can I set up multiple counts in a query, then have each count be for a seperate select?SQL 我可以在查询中设置多个计数,然后让每个计数用于单独的选择吗?
【发布时间】:2015-06-08 17:09:51
【问题描述】:

对不起,我无法比标题更好地解释它。基本上;我只是想知道是否可以在初始选择中使用多个 'count() as ___' 进行选择,每个 'count()' 计算不同选择的行。

或者我会更好地创建一个包含一个字段的新表,然后执行单个选择查询,并为每个要添加的新字段计数?

假设我想要下表:

NAME ---- # of cars ---- # of children ---- # of living relatives
Jon       2              2                  9
Jane      3              1                  10
Bob       1              1                  8

...# 字段中的每一个都取自其他选择,在这些选择中,我将人的名字与他们相关的每个汽车/孩子/生活亲属联系起来。我可以用多个 count(*) 做一个查询吗?或者用一个单一计数的查询启动一个表会更好,所以我有这样的东西:

NAME ---- # of cars
Jon       2
Jane      3
Bob       1

然后通过更多的单计数查询继续向其中添加字段,以便一次添加一个新行,直到到达第一个表?

【问题讨论】:

  • 很难理解你在问什么。不要试图找到解释它的词,而是向我们展示一些示例数据和您试图达到的结果。
  • 这似乎仍然是没有源数据的最终数据。请发布您的“SELECTs”来自的表的架构。

标签: sql count


【解决方案1】:

如果我正确理解您的问题,您正在寻找类似以下查询的内容:

SELECT name,

       (SELECT count(*) FROM childrens
        WHERE childrens.parent_name = users.name ) As `# of children`,

       (SELECT count(*) FROM cars
        WHERE cars.owner_name = users.name ) As `# of cars`   

        -- etc.
        -- etc

FROM users

演示:http://sqlfiddle.com/#!9/3473f/2

【讨论】:

    【解决方案2】:

    假设您需要加入多个表(汽车、儿童和亲戚),您分别计算每个表然后加入:

    select p.Name,
       car.cnt,
       child.cnt,
       rel.cnt
    from person as p
    left join 
     ( select person_id, count(*)
       from cars
       group by person_id
     ) as car
    on p.id = car.person_id
    left join 
     ( select person_id, count(*)
       from children
       group by person_id
     ) as child
    on p.id = child.person_id
    left join 
     ( select person_id, count(*)
       from relatives
       group by person_id
     ) as rel
    on p.id = rel.person_id
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 1970-01-01
      • 2018-09-17
      • 2010-11-19
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      相关资源
      最近更新 更多