繁体   English   中英

使用另一个表的表中的SQL查询SELECT计数和总和

[英]SQL Query SELECT Count & Sum from a table that uses another table

我正在尝试使用B这是另一个表B.CheckerID IS NOT NULL AND A.DBDivRecID='3485'另一个表时, B.CheckerID IS NOT NULL AND A.DBDivRecID='3485' A中特定列的总和和计数,

因此它将获得A的总和和计数,其中B.CheckerID IS NOT 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中的WHERE CheckerID不为null

SELECT SUM(A.DBShares) As totalshares,COUNT(*) As totalcounts 
FROM ShrDivBenf As A 
WHERE CheckerID IS NOT 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,它也会重复整个过程)

+----------+----------+
| DbName   | DBShares |
+----------+----------+
|  John    |     5000 |
|  Mary    |     6000 |
|  Sam     |     7000 |
|  John    |     5000 |
|  Mary    |     6000 |
|  Sam     |     7000 |
+----------+----------+

由于您有几行具有相同的DBDivRecID ,因此在加入时会得到笛卡尔积。 避免这种情况的一种方法是更换joinin运营商:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM