计算来自不同表的相同ID上的单独行:MySQL

时间:2019-06-03 08:13:22

标签: mysql count

我想计算在同一usr_id下的空调和客户数量。这是我的资源:

clients_db

+---------+--------+
| clnt_id | usr_id |
+---------+--------+
|    1    |   a1   |
+---------+--------+
|    2    |   a1   |
+---------+--------+
|    3    |   a2   |
+---------+--------+
|    4    |   a1   |
+---------+--------+

aircon_client_db

+---------+--------+---------+
|  ac_id  | usr_id | clnt_id |
+---------+--------+---------+
|    1    |   a1   |    1    |
+---------+--------+---------+
|    2    |   a2   |    2    |
+---------+--------+---------+
|    3    |   a2   |    1    |
+---------+--------+---------+
|    4    |   a2   |    3    |
+---------+--------+---------+

根据上表。我要数

  1. 在同一clnt_id下有多少usr_id
  2. 在同一ac_id下有多少usr_id

所以我编码:

select count(acdb.ac_id) as nAC,
count(clnt.clnt_id) as nClnt 
from aircon_client_db acdb 
left join clients_db clnt on clnt.usr_sid=acdb.usr_sid 
where acdb.usr_sid='a1'

我希望答案如下:

  1. 3
  2. 1

但是我测试过。我的结果在两个方面都是相同的-4.我在哪里弄错了?

1 个答案:

答案 0 :(得分:1)

您要数:
clnt_id
中的clients_dbac_id表中的aircon_client_db
usr_sid='a1',对吧?
我认为没有必要加入表格。
您可以在同一查询中使用2个子查询分别计数:

select 
  (select count(ac_id) from aircon_client_db where usr_sid = 'a1') as nAC,
  (select count(clnt_id) from clients_db where usr_sid = 'a1') as nClnt

如果在clnt_id中有重复的clients_db或在ac_id中有重复的aircon_client_db,请使用:
count(distinct clnt_id)count(distinct ac_id)