MySQL - 仅在父母怀孕时计算子项的子项

时间:2016-04-21 12:15:36

标签: mysql sql

我有两张桌子:父母和孩子

--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个孩子,没有怀孕

用户2怀孕但没有孩子

用户3没有怀孕也没有孩子(因此没有出现在子表中)

用户4有3个孩子并且怀孕了。

如何计算怀孕且已生育的父母人数? 我需要建立一个计算有多少父母的报告:

  • 怀孕且有1个孩子

  • 怀孕并有2个孩子

  • 怀孕并有3个孩子

  • 怀孕且有+4个孩子

似乎很容易,但我无法理解这一点。 感谢

1 个答案:

答案 0 :(得分:3)

首先,您需要让所有已经由父母出生的孩子:

SELECT COUNT(*), idparent FROM child c WHERE pregnant = 0 GROUP BY idparent

然后你想要所有怀孕的父母:

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

正如上面的评论所说,你的模型非常糟糕,我不确定我是否回答你想要的东西,对不起,如果我不理解的话。