MySQL-仅当父对象怀孕时才对参与方的子对象进行计数

MySQL-仅当父对象怀孕时才对参与方的子对象进行计数,mysql,sql,Mysql,Sql,我有两张桌子:父母和孩子 --parent table: +-------+--------+--------+ | id | name | active | +-------+--------+--------+ | 1 | Júlia | 1 | | 2 | Constança | 1 | | 3 | Diana | 1 | | 4 | Mariana | 1 | --child table: +----+---

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

--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没有怀孕,也没有孩子(因此不会出现在children表中)

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

我如何计算怀孕和已经有孩子的父母的数量? 我需要编制一份报告,统计有多少家长:

  • 怀孕并有一个孩子

  • 你怀孕了,有两个孩子

  • 她怀孕了,有3个孩子

  • 怀孕并有+4个孩子

看起来很容易,但我无法理解这一点。
谢谢

首先,您需要获得父母已经生下的所有孩子:

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

正如上面的评论所说,您的模型非常糟糕,我不确定我是否回答了您的要求,如果我不理解,很抱歉。

您的数据结构似乎没有关于父母是否怀孕的完整信息。它似乎有关于孩子是否怀孕的信息。如果家长怀孕,她将出现在子表中,字段“怀孕”为1。这就是我必须处理的表格:(如果家长有孩子,他们的ID将显示在子表中,字段parent=0怀孕的家长是家长,应该在表pregned\u parent中!我知道,但正如我所说,这些是我必须处理的表。无法修改数据库结构,因此怀孕的孩子出生时将变为0,孩子已在pre表中。)-怀孕时用1出生?好吧,这几乎奏效。问题是,例如,对于用户4-Mariana,结果给了我4个孩子,而事实上她只有3个出生的孩子和1个未出生的孩子(因为她怀孕了).更正:它确实有效。很抱歉我的结论仓促。我如何修改查询以只给我第一次怀孕的父母?(没有其他孩子)您需要使用HAVING,如果您没有找到,我将稍后编辑我的答案。将HAVING COUNT(c.idparent)添加到外部查询?不会返回任何结果。