2016-04-21 59 views
2

我有2個表:父母和子女MySQL的 - 計數partents的兒童僅當父懷孕

--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名子女

看起來很簡單,但我無法理解這一點。 感謝

+2

您的數據結構似乎沒有關於* parent *是否懷孕的完整信息。它似乎有關於*孩子*是否懷孕的信息。 –

+0

如果父母懷孕了,她將出現在懷孕= 1的子女表中。這就是我必須使用的表格:( )如果父母有子女,他們的ID會出現在子女父母表中,其父母代碼爲 – mjpramos

+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 

正如上面的評論所說,你的模型非常糟糕,我不確定我在回答你想要什麼,對不起,如果我不明白。

+0

嗯,這幾乎可以工作。例如,對於用戶4--馬里亞納來說,問題是,結果給了我4個孩子,事實上,她只有3個出生的孩子和1個未出生的孩子(因爲孩子懷孕了)。 – mjpramos

+0

糾錯:確實有效。對不起,我匆忙的結論。 – mjpramos

+0

不客氣;) –