gpt4 book ai didi

sql - 加入三个表然后分组

转载 作者:搜寻专家 更新时间:2023-10-30 21:48:11 26 4
gpt4 key购买 nike

我要连接三个表,然后将其中一列与另一列的值相乘求和。

SELECT t1.column, t2.column, SUM(t1.column * t2.column)
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id
JOIN table3 t3
ON t2.id = t3.id
GROUP BY t1.column, t2.column;

此查询符合我的要求,但我不明白为什么 GROUP BY 有效?

如果我向 select 添加列,是否还必须向 group by 添加列?

最佳答案

你真的知道你在这里做什么吗?

SELECT t1.column, t2.column, SUM(t1.column * t2.column)
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id
JOIN table3 t3 ON t2.id = t3.id
GROUP BY t1.column, t2.column;

查询至少在两个方面非常可疑:

  • 不使用 Table3 - 除了验证 t3 中是否存在 t2 中的 id 的记录。你想要那个吗? 潜在陷阱 如果每个 t2 记录有多个 T3 记录,您将得到 cartesian product ,SUM 列的意外乘法。

  • GROUP BY t1.column, t2.column - 这结合了 (t1.column, t2.column) 的所有唯一组合,并对t1.column * t2.column 的结果。这真的是您想要的吗?

对于第 2 点,请考虑以下(来源)数据:

t1.id, t1.column, t2.column, t1.column*t2.column
1 2 3 6
2 2 3 6
3 3 3 9
4 3 4 12

你最终得到了输出

t1.column, t2.column, SUM(t1.column*t2.column)
2 3 12
3 3 9
3 4 12

看到 (2,3) 合并了总和。

If I add columns to the select I also must add columns to the group by.

SELECT 中的列(某些 DBMS 除外,如 MySQL)必须是聚合(例如 sum/avg/min/max)或 GROUP BY 子句中的列。 还有其他表达式可以使用,例如标量函数或不直接来自表的常量值。

如果您确实需要表中的更多列与聚合相关,您需要清楚地考虑原因。例如如果您按 column1 分组并对 column2 取平均值,您打算对 column3 做什么 - 它应该来自哪一行?

关于sql - 加入三个表然后分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5020022/

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