首页 > 解决方案 > SQL join sum groupby where

问题描述

我有以下两个表: 小提琴

因此,我需要 tab1 中的“名称”列表,其中“dur”的总和为 10 或更大。两个表之间的连接是来自 tab1 的“数字”,可以在 tab2 的“xxx”或“yyy”列中找到。所以预期的输出应该是:Jack, Anna

因为 Jack(1234) 的“dur”之和为 10,而 Anna(7582) 的“dur”之和为 12。

到目前为止,我知道如何根据一列 XXX 获得总和:

SELECT tab1.name FROM tab1
INNER JOIN (
  SELECT xxx, SUM(dur) AS total_dur
  FROM tab2
  GROUP BY xxx)
tab2 ON tab1.number=tab2.xxx
WHERE total_dur >=10

但我如何也考虑第二个'yyy'列?

标签: sqlpostgresqljoingroup-by

解决方案


您可以OR在连接条件中使用来检查两列。使用HAVING也可能使查询更具可读性。

SELECT name FROM tab1
JOIN tab2 ON xxx = number OR yyy = number
GROUP BY name
HAVING SUM(dur) >= 10

推荐阅读