使用联合第 2 部分从多个表中选择计数相关行
Posted
技术标签:
【中文标题】使用联合第 2 部分从多个表中选择计数相关行【英文标题】:Select count dependent rows from multiple tables with union part 2 【发布时间】:2015-12-04 01:47:01 【问题描述】:在第 2 部分中,我有两个表
第一个表来自 tb1,第二个来自 tb2。
+------+----------+------+
| kd | skl | name |
+------+----------+------+
| 001 | database | a |
| 001 | web | b |
| 001 | web | c |
| 002 | app | d |
| 002 | web | e |
| 002 | app | f |
| 003 | json | g |
| 003 | - | h |
| 003 | - | i |
| 004 | ruby | j |
| 004 | database | k |
| 004 | web | l |
| 005 | - | m |
| 005 | - | n |
| 005 | - | o |
+------+----------+------+
+------+----------+------+
| kd | skl | name |
+------+----------+------+
| 001 | database | p |
| 001 | web | q |
| 001 | web | r |
| 002 | app | s |
| 002 | web | t |
| 002 | app | u |
| 003 | json | v |
| 003 | web | w |
| 003 | app | x |
| 004 | ruby | y |
| 004 | database | z |
| 004 | web | d |
| 005 | - | c |
| 005 | web | b |
| 005 | app | a |
+------+----------+------+
这和我在Select count dependent rows from multiple tables with union的第一个问题一样
我在下面接受这个查询。
select kd,skl,name,sum(row) brs from
(select a.kd,skl,name,count(a.kd) row
from tb1 a where skl in('web','app')
group by a.kd,skl,name
union all
select b.kd,skl,name,count(b.kd)
from tb2 b where skl in('web','app')
group by b.kd,skl,name)t
group by kd,name,skl;
选择查询给出结果
+------+-----+------+------+
| kd | skl | name | brs |
+------+-----+------+------+
| 001 | web | b | 1 |
| 001 | web | c | 1 |
| 001 | web | q | 1 |
| 001 | web | r | 1 |
| 002 | app | d | 1 |
| 002 | web | e | 1 |
| 002 | app | f | 1 |
| 002 | app | s | 1 |
| 002 | web | t | 1 |
| 002 | app | u | 1 |
| 003 | web | w | 1 |
| 003 | app | x | 1 |
| 004 | web | d | 1 |
| 004 | web | l | 1 |
| 005 | app | a | 1 |
| 005 | web | b | 1 |
+------+-----+------+------+
问题是 brs 列不计数取决于 kd 列数据。
我需要下面的结果
+------+-----+------+------+
| kd | skl | name | brs |
+------+-----+------+------+
| 001 | web | b | 4 |
| 001 | web | c | 4 |
| 001 | web | q | 4 |
| 001 | web | r | 4 |
| 002 | app | d | 6 |
| 002 | web | e | 6 |
| 002 | app | f | 6 |
| 002 | app | s | 6 |
| 002 | web | t | 6 |
| 002 | app | u | 6 |
| 003 | web | w | 2 |
| 003 | app | x | 2 |
| 004 | web | l | 2 |
| 004 | web | d | 2 |
| 005 | web | b | 2 |
| 005 | app | a | 2 |
+------+-----+------+------+
请给出选择查询示例或该主题的线索。
非常感谢所有建议。
【问题讨论】:
您能否向我们介绍一下您的查询想要达到的目标? @TimBiegeleisen 显示所有名称列数据,计数取决于 brs 列中的 kd 列 【参考方案1】:这不是最美观的查询,但它应该可以工作:
SELECT t1.kd, t1.sk1, t1.name, t2.brs
FROM
(
SELECT a.kd, skl, name
FROM tb1 a WHERE skl IN ('web','app')
UNION ALL
SELECT b.kd, skl, name,
FROM tb2 b WHERE skl IN ('web','app')
) t1
INNER JOIN
(
SELECT r.kd, SUM(r.row) brs
FROM
(
SELECT a.kd, COUNT(a.kd) row
FROM tb1 a WHERE skl IN ('web','app')
GROUP BY a.kd
UNION ALL
SELECT b.kd, COUNT(b.kd)
FROM tb2 b WHERE skl IN ('web','app')
GROUP BY b.kd
) r
GROUP BY r.kd
) t2
ON t1.kd = t2.kd
【讨论】:
以上是关于使用联合第 2 部分从多个表中选择计数相关行的主要内容,如果未能解决你的问题,请参考以下文章