MySQL - 仅当 parent 怀孕时才计算 children 父母
MySQL - Count children of partents only if parent is pregnant
我有 2 个 table:parent 和 children
--parent table:
+-------+--------+--------+
| id | name | active |
+-------+--------+--------+
| 1 | Júlia | 1 |
| 2 | Constança | 1 |
| 3 | Diana | 1 |
| 4 | Mariana | 1 |
--child table:
+----+-----------+-----------+
| id | idparent | pregnant |
+----+-----------+-----------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 3 | 2 | 1 |
| 4 | 4 | 0 |
| 5 | 4 | 0 |
| 6 | 4 | 0 |
| 7 | 4 | 1 |
用户 1 有 2 children 并且没有怀孕
用户 2 怀孕但没有 children
用户 3 没有怀孕也没有 children(因此没有出现在 children table)
用户 4 有 3 children 并且怀孕了。
我如何统计 parent 已怀孕且已经有 children 的人数?
我需要构建一个报告来计算有多少 parents:
怀孕并有 1 个 child
怀孕并生了 2 children
怀孕生了3个children
怀孕并有+4 children
看起来很容易,但我无法解决这个问题。
谢谢
首先你需要得到所有 parent 已经出生的 children :
SELECT COUNT(*), idparent FROM child c WHERE pregnant = 0 GROUP BY idparent
那你要所有怀孕的parent:
SELECT p.id, p.name FROM parent p
INNER JOIN child c ON c.idparent = p.id
WHERE c.pregnant = 1
然后:
SELECT p.id, p.name, t.nb_child FROM parent p
INNER JOIN child c ON c.idparent = p.id
INNER JOIN (SELECT COUNT(*) as nb_child, idparent
FROM child c
WHERE pregnant = 0 GROUP BY idparent) t ON t.idparent = p.id
WHERE c.pregnant = 1
正如上面的评论所说,你的模型很糟糕,我不确定我是否回答了你想要的,如果我没有理解,请原谅。
我有 2 个 table:parent 和 children
--parent table:
+-------+--------+--------+
| id | name | active |
+-------+--------+--------+
| 1 | Júlia | 1 |
| 2 | Constança | 1 |
| 3 | Diana | 1 |
| 4 | Mariana | 1 |
--child table:
+----+-----------+-----------+
| id | idparent | pregnant |
+----+-----------+-----------+
| 1 | 1 | 0 |
| 2 | 1 | 0 |
| 3 | 2 | 1 |
| 4 | 4 | 0 |
| 5 | 4 | 0 |
| 6 | 4 | 0 |
| 7 | 4 | 1 |
用户 1 有 2 children 并且没有怀孕
用户 2 怀孕但没有 children
用户 3 没有怀孕也没有 children(因此没有出现在 children table)
用户 4 有 3 children 并且怀孕了。
我如何统计 parent 已怀孕且已经有 children 的人数? 我需要构建一个报告来计算有多少 parents:
怀孕并有 1 个 child
怀孕并生了 2 children
怀孕生了3个children
怀孕并有+4 children
看起来很容易,但我无法解决这个问题。 谢谢
首先你需要得到所有 parent 已经出生的 children :
SELECT COUNT(*), idparent FROM child c WHERE pregnant = 0 GROUP BY idparent
那你要所有怀孕的parent:
SELECT p.id, p.name FROM parent p
INNER JOIN child c ON c.idparent = p.id
WHERE c.pregnant = 1
然后:
SELECT p.id, p.name, t.nb_child FROM parent p
INNER JOIN child c ON c.idparent = p.id
INNER JOIN (SELECT COUNT(*) as nb_child, idparent
FROM child c
WHERE pregnant = 0 GROUP BY idparent) t ON t.idparent = p.id
WHERE c.pregnant = 1
正如上面的评论所说,你的模型很糟糕,我不确定我是否回答了你想要的,如果我没有理解,请原谅。