【问题标题】:SQL count from 2 tables with true/false来自 2 个表的 SQL 计数为真/假
【发布时间】:2019-02-01 14:16:06
【问题描述】:

我有 2 张桌子:

  • 表 1:键、品牌、类型、欧洲、RefNr
  • 表 2:密钥、所有者、地址、RefNr

两个表中的 RefNr 是唯一标识符,表 1 中的 European 是 True/False 字段。

我的问题是如何统计所有拥有欧洲汽车的车主?

【问题讨论】:

    标签: sql count


    【解决方案1】:

    根据给出的信息,我会说您正在寻找具有简单 where 条件的连接?

    select count(distinct t2.owner)
    from table1 t1
      join table2 t2 on t1.refnr = t2.refnr
    where t1.european = true;
    

    distinct t2.owner 是必要的,以防某人拥有多于一辆车。

    【讨论】:

    • 。 .考虑到查询的措辞(“所有所有者的数量”),我认为您是对的。
    【解决方案2】:

    Sql Server 的解决方案如下:

    Select count(t2.Owner) as EuropeanCarOwner
    From Table1 t1
    Inner join Table2 t2 on t2.RefNr = t1.RefNr
    where t1.European = 1
    

    请注意,欧洲列不是布尔类型而是 varchar,您可以在 while 子句中执行 t1.European = 'true'

    如果一个人可以拥有多辆汽车并且每辆汽车都作为不同的记录输入,如果需要,每个车主只能计算一次:count(distinct t2.owner)

    【讨论】:

      【解决方案3】:

      并不是说你正在使用哪个 DBMS,这应该在 SSMS 中工作;

          SELECT  COUNT(*) AS EuroOwners
          FROM Table1 t1
          INNER JOIN Table2 t2 ON t1.RefNr = t2.RefNr AND t1.European = 1
      

      【讨论】:

      • DBMS = 使用经典 ASP 访问。您的解决方案效果很好,我唯一需要更改的是:INNER JOIN Table2 t2 ON t1.RefNr = t2.RefNr WHERE t1.European = TRUE
      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多