【问题标题】:query make a count to 1 which does not satistfy the condition不满足条件的查询计数为 1
【发布时间】:2021-03-29 19:19:28
【问题描述】:

我有一张两张表,我想知道每个部门都分配给项目的人数

CREATE TABLE first1( a int,projectname varchar(20));
INSERT INTO first1 VALUES
(1001,'crm'),
(1002,'iic'),
(1003,'abc'),
(1004,'sifty bank');

CREATE TABLE diff(b int,name varchar(20),p_id int );
INSERT INTO diff VALUES
(101,'priya',1001),
(102,'divya',1002),
(103,'sidhu',null),
(104,'shiva',null),
(105,'surya',1002);

查询:

select first1.projectname,count(*) from first1  left join diff on first1.a=diff.p_id group by 
first1.projectname;

这段代码的输出是:

abc|1
crm|1
iic|2
sifty bank|1

预期的输出是:

abc|0
crm|1
iic|2
sifty bank|0

【问题讨论】:

  • 我迷路了。什么是“部门”?

标签: mysql sql join count left-join


【解决方案1】:

问题是count(*);它计算每组中有多少行 - 没有分配任何人的项目仍计为 1。相反,您需要从左表中输入 count() 某些内容,因此不考虑 null 值:

select f.projectname, count(d.p_id) as cnt_diff
from first1 f
left join diff d on f.a = d.p_id 
group by f.projectname;

请注意,您可以使用子查询获得相同的结果:

select f.projectname, 
    (select count(*) from diff d where d.p_id = f.a)  as cnt_diff
from first1 f

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多