连接SQL表和计数

时间:2018-09-27 11:28:59

标签: mysql sql vb.net

尝试加入两个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

我想以tableB为参考来计算tableA中有多少个领导者?

到目前为止,我所知道的是行不通的,但是我不知道如何加入表格

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

4 个答案:

答案 0 :(得分:2)

您可以使用此查询

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”记录仍然可以正常使用)

当然,如果您只对“领导者”记录感兴趣,则应添加适当的条件,例如

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

答案 1 :(得分:1)

此查询将为您提供inttableA的人数:

'Leader'

输出:

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

答案 2 :(得分:0)

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

this.selectedValue.installerserviceModel.map(x => x.categoryServiceModel.serviceName);

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

您甚至可以在没有where子句的情况下做到这一点,而在用例时使用case。

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

有很多方法可以做到这一点。您可以加入另一个表并使用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 = 1。但是,您选择确实要这样做。

引用tableB的另一个示例:

g_name IN('S1','S2')

答案 3 :(得分:0)

在下面的查询中使用

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