[英]SUM acorrding to another column
我需要知道是否有沒有子查詢的方法。
這是我的表結構:
id-name-father_id
1 joe 0
2 mark 0
3 muller 0
4 miki 2
5 timi 2
6 moses 2
7 david 1
8 momo 0
9 daniel 0
10 ermi 3
我的表邏輯是
0
表示他不是某個孩子
1+
表示他是該行中的人子。
注意:如果有人育有孩子,他的父親ID仍為0(這意味着我的餐桌上沒有祖父)
我的查詢是:
SELECT id, name, count(id=father_id) as sons
WHERE father_id = 0
我想非兒童的名單(father_id=0)
和sum
它具有兒童。 有沒有一種方法可以在沒有子查詢的情況下獲得結果?
這應該做到(MySQL):
SELECT `parents`.`id`, `parents`.`name`, COUNT(`children`.*) AS sons
FROM `people` AS parents
LEFT JOIN `people` AS children ON `parents`.`id` = `children`.`father_id`
WHERE `parents`.`father_id` = 0
GROUP BY `parents`.`id`
據Gary所說,我們需要在其他SQL數據庫中為GROUP BY
添加name
:
SELECT `parents`.`id`, `parents`.`name`, COUNT(`children`.*) AS sons
FROM `people` AS parents
LEFT JOIN `people` AS children ON `parents`.`id` = `children`.`father_id`
WHERE `parents`.`father_id` = 0
GROUP BY `parents`.`id`, `parents`.`name`
我們在這里自己擺桌子。 因此,我們與所有父母一起帶孩子。
這將導致如下結果:
parents.id parents.name children.id children.name
1 joe 7 david
2 mark 4 miki
2 mark 5 timi
2 mark 6 moses
3 muller 10 ermi
8 momo - - # left join allows this line
9 daniel - -
但是現在我們每個父母都有幾次。 因此,我們正在將整個事情都放在GROUP ID上,而不是父母的ID,這將導致以下結果:
parents.id parents.name COUNT(children.*)
1 joe 1
2 mark 3
3 muller 1
8 momo 0
9 daniel 0
您應該能夠做到這一點而無需任何聯接或子查詢,如下所示:
select case father_id when 0 then id else father_id end id,
max(case father_id when 0 then name end) name,
sum(sign(father_id)) sons
from table
group by case father_id when 0 then id else father_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.