我的数据库中有以下数据:
scu_banks:
---------------------------------
| id | type | name |
|-------------------------------|
| 1 | 1 | One |
| 2 | 1 | Two |
| 3 | 2 | Three |
| 4 | 3 | Four |
---------------------------------
scu_语句:
---------------------------------
| id | code | status |
|-----------------------------------|
| 1 | 1 | 0 |
| 2 | 1 | 1 |
| 3 | 2 | 0 |
| 4 | 1 | 0 |
-------------------------------------
我想做的是选择表 scu_banks
中的所有行并计算状态为 0 的行数。数据应表示为:
--------------------------------------------------------------
| scu_banks.type | scu_banks.name | status | scu_banks.id |
--------------------------------------------------------------
| 1 | One | 2 | 1 |
| 1 | Two | 0 | 2 | //There is no row with status 0
| 2 | Three | 0 | 3 |
| 3 | Four | 0 | 4 |
--------------------------------------------------------------
当我运行我的 sql 语句时,我得到以下数据:
---------------------------------------------------------------
| scu_banks.type | scu_banks.name | status | scu_banks.id |
--------------------------------------------------------------
| 1 | One | 2 | 1 |
---------------------------------------------------------------
我在这种情况下得到的数据是正确的。 2 它是表 scu_statement
中所有行的总计数。该语句也不显示数据库中的其他行。
有人知道我的sql语句有什么问题吗?
这是我的sql语句:
SELECT b.type 'scu_banks.type',
b.name 'scu_banks.name',
count(y.status) 'status',
b.id 'scu_banks.id'
FROM scu_banks b
LEFT JOIN (SELECT s.code, count(s.status) status
FROM scu_bankstatement s
WHERE status='0'
GROUP BY s.code) y
ON y.code = b.id
最佳答案
您需要在外部查询中使用 GROUP BY
,否则查询只会计算所有银行的状态。您还可以通过 LEFT JOIN
在 code/id 和 status = 0 上合并两个表来简化您的查询
SELECT b.type `scu_banks.type`,
b.name `scu_banks.name`,
COUNT(s.status) `status`,
b.id `scu_banks.id`
FROM scu_banks b
LEFT JOIN scu_statement s ON s.code = b.id AND s.status = 0
GROUP BY b.id, b.name, b.type
输出
scu_banks.type scu_banks.name status scu_banks.id
1 One 2 1
1 Two 1 2
2 Three 0 3
3 Four 0 4
关于mysql - 使用 LEFT JOIN 计数仅显示一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53938022/