gpt4 book ai didi

sql - SQL:一个值的总和,但仅用于不同的ID-条件总和?

转载 作者:行者123 更新时间:2023-12-04 21:51:17 26 4
gpt4 key购买 nike

我有以下结构:

有多个事件typ1和typ2的日期,其中typ1和typ2具有到其各自日期的外键。 Typ2也有持续时间。

现在,我要计算所有typ1事件,所有typ2事件和typ2持续时间的总和。

示例数据:

日:

ID = 1 | Date = yesterday | ...

类型1:
ID = 1 | FK_DAY = 1 | ...

ID = 2 | FK_DAY = 1 | ...

类型2:
ID = 1 | FK_DAY = 1 | duration = 10

ID = 2 | FK_DAY = 1 | duration = 20

我现在想要结果:
Day.ID = 1 | countTyp1 = 2 | countTyp2 = 2 | sumDurationTyp2 = 30

我的问题是总和,我需要类似“针对不同typ2.ID的总和”之类的东西。有人知道解决该问题的方法吗?

我正在使用类似以下的内容,但是这当然不能按照我想要的方式工作:
SELECT day.id,
count( DISTINCT typ1.id ),
count( DISTINCT typ2.id ),
sum( duration ) AS duration
FROM days
LEFT JOIN typ
ON day.id = typ1.id
LEFT JOIN typ2
ON day.id = typ2.id
GROUP BY day.id;

最佳答案

我一般的方法是在加入之前预先汇总每个表。

部分原因是您实际上并未求和不同的值(如果两行中的每行都有10,答案仍然是20)。

但主要是因为它实际上更简单。子查询进行汇总,然后所有连接均为1:1。

SELECT
days.id,
typ_agg.rows,
type2_agg.rows,
type2_agg.duration
FROM
days
LEFT JOIN
(SELECT fk_day, COUNT(*) as rows FROM typ GROUP BY fk_day) AS typ_agg
ON days.id = typ_agg.fk_day
LEFT JOIN
(SELECT fk_day, COUNT(*) as rows, SUM(duration) as duration FROM typ2 GROUP BY fk_day) AS typ2_agg
ON days.id = typ2_agg.fk_day

关于sql - SQL:一个值的总和,但仅用于不同的ID-条件总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com