【问题标题】:Joining sql tables and count加入sql表和计数
【发布时间】:2018-09-27 11:28:59
【问题描述】:

试图加入两个 sql 表,以便我可以数数。示例:

id | n_name | n_group    tableA
--------------------
1    Peter    S1
2    Paul     S2
3    James    A1
4    Arty     S2
5    Amy      S2


id | g_name | g_group    tableB
--------------------
1    S1       Leader
1    S2       Leader
2    A1       User

我想统计tableA中有多少领导,以tableB为参考?

到目前为止,我知道哪些不起作用,但我不知道如何加入表格

Try
            connect()
            cmd.CommandText = "SELECT count(n_group) FROM [tableA].........

            Dim lrd As SqlDataReader = cmd.ExecuteReader()
            lrd.Read()
            label1.text = lrd("n_group").ToString()
            lrd.Close()
            disconnect()

        Catch ex As System.Exception
            label1.text = "0"
        End Try

【问题讨论】:

  • 。 .什么是“领导者”? “以tableB为参考”是什么意思?
  • 您对[tableA] 的使用使这看起来像是一个SQL Server 问题。此外,您还没有向我们展示您的查询。请edit您的问题提供有关问题所在的更多详细信息。失败代码中的行号特别有用。

标签: mysql sql vb.net


【解决方案1】:

你可以使用这个查询

select b.g_group, count(b.g_group) 
from tablea a inner join tableb b on a.n_group = b.g_name 
group by b.g_group

您不需要指定 g_group 内容,但您可以使用它来 GROUP BY 获得的结果加入两个表(因此,即使您有三个“Leader”记录,您的查询仍然适用于任何“User”记录)

当然,如果您只对“Leader”记录感兴趣,您应该添加适当的 where 条件,例如

select b.g_group, count(b.g_group) 
from tablea a inner join tableb b on a.n_group = b.g_name 
where b.g_group = 'Leader'  -- >> or use b.id = 1 <<
group by b.g_group

【讨论】:

    【解决方案2】:

    此查询将为您提供tableA 中属于'Leader' 的人数:

    SELECT COUNT(*)
    FROM tableA a
    JOIN tableB b ON b.g_name = a.n_group
    WHERE b.g_group = 'Leader'
    

    输出:

    4
    

    【讨论】:

      【解决方案3】:

      使用下面的查询,

      SELECT COUNT(A.*) FROM tableA A
      INNER JOIN tableB B ON A.n_group = B.g_name
      WHERE B.g_name IN ('S1', 'S2')
      

      【讨论】:

        【解决方案4】:

        如果您想计算 tableA 中有多少领导者,则不需要 tableB,因为您已经有了 ID,并且您知道哪些 ID 是领导者。

        SELECT count(n_group) AS CountOfLeaders
        FROM [tableA] as a
        WHERE a.n_group = 'S1' OR a.n_group = 'S2'
        

        您的表 B 显示 S1 和 S2 ID 是领导者。

        你甚至可以不用 where 子句和用例 when 来代替。

        SELECT count(case when a.n_group = 'S1' OR 
                               a.n_group = 'S2' 
                     then 1 else NULL end) AS CountOfLeaders
        FROM [tableA] as a
        

        有很多方法可以做到这一点。您可以加入另一张桌子并使用ID = 1g_name IN('S1','S2')。不管怎样,你真的选择去做。

        另一个引用tableB的例子:

        SELECT count(n_group) AS CountOfLeaders
        FROM [tableA] as a
        INNER JOIN tableB b ON a.n_group = b.g_name
        WHERE b.id = 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2017-02-20
          • 2012-04-01
          • 2020-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多