56,679
社区成员
发帖
与我相关
我的任务
分享
mysql> select * from a;
+------+--------+
| name | number |
+------+--------+
| a | 10 |
| b | 10 |
+------+--------+
2 rows in set (0.00 sec)
mysql> select * from b;
+------+------+
| name | type |
+------+------+
| a | ta |
| a | tb |
| a | tc |
| b | ta |
+------+------+
4 rows in set (0.00 sec)
mysql>
mysql> select a.name,
-> (select count(*) from b where name=a.name and type='ta') as tacnt
-> from a;
+------+-------+
| name | tacnt |
+------+-------+
| a | 1 |
| b | 1 |
+------+-------+
2 rows in set (0.00 sec)
mysql>
mysql> select a.name,
-> (select count(*) from b where name=a.name and type='tb') as tacnt
-> from a;
+------+-------+
| name | tacnt |
+------+-------+
| a | 1 |
| b | 0 |
+------+-------+
2 rows in set (0.00 sec)
mysql>
mysql> select a.name,
-> (select count(*) from b where name=a.name and type='ta')
-> -(select count(*) from b where name=a.name and type='tb') as tacnt
-> from a;
+------+-------+
| name | tacnt |
+------+-------+
| a | 0 |
| b | 1 |
+------+-------+
2 rows in set (0.00 sec)
mysql>
select
a.name,
isnull(b.ta,0) as ta,
isnull(c.tb,0) as tb,
a.number-isnull(b.ta,0)-isnull(c.tb,0)
from
a
left join
(select name,count(1) as ta from b where type='ta' group by name) as b
on
a.name=b.name
left join
(select name,count(1) as tb from b where type='tb' group by name) as c
on
a.name=c.name
select
a.name,
isnull(b.ta,0) as ta,
isnull(c.tb,0) as tb,
a.number-isnull(b.ta,0)-isnull(c.tb,0)
from
a
left join
(select name,count(1) as ta where type='ta' group by name) as b
on
a.name=b.name
left join
(select name,count(1) as tb where type='tb' group by name) as c
on
a.name=c.name
select a.name, b.type, count(*) as 对应总个数 from 表A a inner join 表B on a.name=b.name where b.type in ('ta','tb') group by a.name, b.type;