Mysql SQL查询选择计数&;从使用另一个表的表求和
我试图在使用B时获取a中特定列的总和和计数,B是另一个表,其中Mysql SQL查询选择计数&;从使用另一个表的表求和,mysql,Mysql,我试图在使用B时获取a中特定列的总和和计数,B是另一个表,其中B.CheckerID不为NULL,a.DBDivRecID='3485' 因此,它将获得A中的总和和计数,其中B.CheckerID不为NULL A.DBDivRecID='3485' 我这样做了,但是我得到了表A和表B组合的结果,我发现两个表的DBShares列的名称相同,我只需要表A的总DBShares,只需要表B来检查CheckerID SELECT SUM(A.DBShares) As totalshares,COUNT(*
B.CheckerID不为NULL,a.DBDivRecID='3485'
因此,它将获得A中的总和和计数,其中B.CheckerID不为NULL A.DBDivRecID='3485'
我这样做了,但是我得到了表A和表B组合的结果,我发现两个表的DBShares列的名称相同,我只需要表A的总DBShares,只需要表B来检查CheckerID
SELECT SUM(A.DBShares) As totalshares,COUNT(*) As totalcounts
FROM ShrDivBenf As A
INNER JOIN TEMPDRP_3485 AS B ON A.DBDivRecID=B.DBDivRecID
WHERE B.CheckerID IS NOT NULL AND A.DBDivRecID='3485'
我想要这样的东西(表B中的CheckerID不为null)
样品
表A
+------------+----------+-------+
| DBDivRecID | DBShares |Name |
+------------+----------+-------+
| 3485 | 5000 |John |
| 3485 | 6000 |Mary |
| 3485 | 7000 |Sam |
+------------+----------+-------+
表B
+------------+-----------+----------+--------+
| DBDivRecID | CheckerID | DBShares | DBName |
+------------+-----------+----------+--------+
| 3485 | 4555 | 5000 | John |
| 3485 | 4555 | 6000 | Mary |
| 3485 | 4555 | 7000 | Sam |
| 3485 | NULL | 8000 | Derek |
+------------+-----------+----------+--------+
假设我这样做了
SELECT A.DbName, A.DbShares
FROM ShrDivBenf As A
INNER JOIN TEMPDRP_3485 AS B ON A.DBDivRecID=B.DBDivRecID
WHERE B.CheckerID IS NOT NULL AND A.DBDivRecID='3485'
我会得到这个(即使我的数据库只有1个John、Mary和Sam,它也会重复整个过程)
由于有多行具有相同的
DBDivRecID
,因此在加入时将得到笛卡尔乘积。避免这种情况的一种方法是将join
替换为in
操作符:
SELECT SUM(A.DBShares) As totalshares, COUNT(*) As totalcounts
FROM ShrDivBenf
WHERE DBDivRecID='3485' AND
DBDivRecID IN (SELECT DBDivRecID
FROM TEMPDRP_3485
WHERE CheckerID IS NOT NULL)
我想我明白你想要什么;您正在查找没有空检查程序的记录。鉴于此,请尝试以下方法:
SELECT SUM(A.DBShares) As totalshares, COUNT(*) As totalcounts
FROM ShrDivBenf
WHERE DBDivRecID='3485' AND
DBDivRecID NOT IN (SELECT DBDivRecID
FROM TEMPDRP_3485
WHERE CheckerID IS NULL)
什么工作不正常?总和是否太大,计数是否太高(意味着您加入的列太少,并且得到了重复的列),或者是否存在其他问题?您是否可以将ShrDivBenf中Select count(*)的总和视为where a.DBDivRecID='3485'?这是否低于从联接中获得的计数?您的查询没有问题。请打印输出。我想你会发现输出不是你上面所说的。@DerekToh。使用示例数据和所需结果编辑您的问题。我认为我使用了内部联接错误。。我只想得到一段时间使用“是”的结果,我尝试了这个方法,但我发现即使那些CheckerID为NULL的方法也有DBDivRecID='3485'@DerekToh,我不明白你想说什么。请你详细说明一下好吗?我编辑了表B,还有什么我可以直接得到CheckerID的吗?@DerekToh你能用你想要得到的结果编辑这个问题吗?
SELECT SUM(A.DBShares) As totalshares, COUNT(*) As totalcounts
FROM ShrDivBenf
WHERE DBDivRecID='3485' AND
DBDivRecID IN (SELECT DBDivRecID
FROM TEMPDRP_3485
WHERE CheckerID IS NOT NULL)
SELECT SUM(A.DBShares) As totalshares, COUNT(*) As totalcounts
FROM ShrDivBenf
WHERE DBDivRecID='3485' AND
DBDivRecID NOT IN (SELECT DBDivRecID
FROM TEMPDRP_3485
WHERE CheckerID IS NULL)