mysql - 根据另一个表的每条记录计算 MySQL 表中的记录
问题描述
我在 MySQL 数据库中有两个表 -
table_a
:
+----+---------+-------------+-----------------
| id | section | sub_section | ...other_fields
+----+---------+-------------+-----------------
| 1 | A | X |
| 2 | A | Y |
| 3 | A | Z |
| 4 | B | P |
| 5 | B | Q |
| 6 | C | L |
| 7 | C | M |
| 8 | C | N |
| 9 | C | O |
+----+---------+-------------+-----------------
table_b
:
+----+-------------+---------+-----------------
| id | sub_section | b_count | ...other_fields
+----+-------------+---------+-----------------
| 1 | X | 1 |
| 2 | Y | 1 |
| 3 | L | 0 |
| 4 | P | 1 |
| 5 | P | 1 |
| 6 | X | 0 |
| 7 | M | 1 |
| 8 | Y | 0 |
| 9 | Q | 1 |
+----+-------------+---------+-----------------
我想从表 B 中找到每个不同in的sub_section
in计数table_b
和总和-b_count
section
table_a
预期结果:
+---------+--------------------+--------------+
| section | COUNT(sub_section) | SUM(b_count) |
+---------+--------------------+--------------+
| A | 4 | 2 |
| B | 3 | 3 |
| C | 2 | 1 |
+---------+--------------------+--------------+
一种方法是运行 Count(section) 数量的查询,然后组合结果。
就像是:
SELECT 'A' AS section, COUNT(sub_section), SUM(b_count) FROM table_b WHERE sub_section IN (SELECT DISTINCT sub_section FROM table_a WHERE section='A')
UNION
SELECT 'B' AS section, COUNT(sub_section), SUM(b_count) FROM table_b WHERE sub_section IN (SELECT DISTINCT sub_section FROM table_a WHERE section='B')
UNION
SELECT 'C' AS section, COUNT(sub_section), SUM(b_count) FROM table_b WHERE sub_section IN (SELECT DISTINCT sub_section FROM table_a WHERE section='C');
有没有更好的方法在查询中做到这一点?
中的section
列表table_a
是动态的并且可能会更改,我不想在每次值更改时更新我的查询。
解决方案
SELECT t1.section, COUNT(DISTINCT t1.sub_section), SUM(t2.b_count)
FROM table_a t1
LEFT JOIN table_b t2 USING (sub_section)
GROUP BY t1.section;
推荐阅读
- python - 为什么这个打印不一样?
- java - 如何用 Spring JPA 替换 CriteriaBuilder
- python - 如何使用 ruamel.yaml 往返正确设置 YAML 流样式转储?
- macos - Mac clang 安装似乎覆盖了 GCC 安装
- javascript - 我的函数无法返回我的 Firestore 数据
- python - 如何将 ubuntu 降级到 python 3.6?
- azure - 我们如何配置从基于 yaml 的 azure CI 管道的 Jfrog 工件中提取 npm 包?
- r - R 数据帧的匹配对
- javascript - 我的代码具有很高的复杂性。我怎样才能减少它?
- c - 我怎样才能把这个“for”循环翻译成一个“while”循环?