簡體   English   中英

SUM對應於另一列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM