当前位置: 首页 > 知识库问答 >
问题:

在mysql中使用多个表的列的多个求和函数给出的值不正确

范瀚昂
2023-03-14

我有几个MySQL表,如下所示

Table1
Att1 | Flag
xxx  |  1


Table2
Att1 | Flag
xxx  |  2
yyy  |  2


Table3
Att1 | Flag
xxx  |  3
yyy  |  3


Table4
Att1 | Flag
xxx  |  4

Table5
Att1 | Flag
xxx  |  6



每个表都有一些属性和上面的属性。我想求和每个表的标志属性并查看它们。下面是MySQL代码。

create view block as 
select sum(table1.flag)as table1, sum(table2.flag)as table2,
sum(table3.flag) as table3,sum(table4.flag) as table4,
sum(table5.flag) as table5 
from table1,table2,table3,table4,table5;

我在我的视野中看到的是:

table1|table2|table3|table4|table5
4     |8     |12    |16    |24

其实我想在我的视图中看到的是:

table1|table2|table3|table4|table5
1     |4     |6     |4     |6

帮帮我!提前道谢!

共有2个答案

巫坚白
2023-03-14

每个表中的每一行都与另一个表中的每一行连接,然后对结果进行求和。这不是你想要的。试试看:

create view block as 
select 'table1' as tableName, sum(flag) from 
table1
UNION ALL
select 'table2' as tableName, sum(flag) from 
table2
UNION ALL
select 'table3' as tableName, sum(flag) from 
table3
UNION ALL
select 'table4' as tableName, sum(flag) from 
table4
UNION ALL
select 'table5' as tableName, sum(flag) from 
table5
公冶俊达
2023-03-14

请尝试以下操作:

select table1, table2, table3, table4, table5
from (select sum(table1.flag)as table1) t1 cross join
     (select sum(table2.flag)as table2) t2 cross join
     (select sum(table3.flag)as table2) t3 cross join
     (select sum(table4.flag)as table2) t4 cross join
     (select sum(table5.flag)as table2) t5

您的查询正在执行交叉联接,这是表之间的笛卡尔积。避免这种情况的最佳方法是为每个表执行单独的聚合。您也可以在select子句中执行以下操作:

select 
     (select sum(table1.flag)as table1) as t1,
     (select sum(table2.flag)as table2) as t2,
     (select sum(table3.flag)as table2) as t3,
     (select sum(table4.flag)as table2) as t4,
     (select sum(table5.flag)as table2) as t5
 类似资料:
  • 问题内容: 我有一个保存名称的数据库,我必须创建一个新列表,该列表将保存诸如ID,名称和性别之类的值,并将其插入当前数据库中。我必须创建一个不在数据库中的名称列表。因此,我只检查了3个名称并尝试使用它们。 我不确定应该创建哪种列表,以及如何循环遍历以正确方式插入所有新值。 到目前为止,这就是我所拥有的: 我对本材料非常陌生,因此将不胜感激。提前致谢! 问题答案: mysql>从测试中选择*; 改编

  • 问题内容: 我编写了一个脚本,该脚本在用户每次登录我们域中的计算机时运行。此脚本记录用户以及他们登录的计算机。任意数量的用户可以登录任意数量的计算机。 我只是从一个不在的顾问那里继承了这个IT环境,并且正在编写这个小查询,因此当接到用户的呼叫时,我可以按该用户的名字进行搜索,并合理地预测该用户正在使用的计算机。他们登录到任何给定计算机的次数。 这是“登录”表中数据的示例: 我要敲定的逻辑是跨多个列

  • 问题内容: 我很想知道是否有一种“ pythonic”的方法来将列表中的值分配给元素?更清楚地说,我要的是这样的东西: 以便: 我正在寻找比手动执行任何其他更好的选择: 问题答案: 只需输入: 当您像上面那样被分配给多个变量时,Python就会使用。 在此扩展中,您还可以解压缩为多个小于使用star运算符的长度的变量:

  • 问题内容: 在MySQL中,我有两个表: 和 我需要对表(等式7)和表(等式3)中的列求和,并将结果作为总数量。 当我做 我得到了笛卡尔积(20),但是我需要的正确答案是10。如何更改此查询以获得正确的结果? 问题答案:

  • 问题内容: 因此,这更多是一个设计问题。 我有一个主键(例如用户的ID),并且有大量与该用户相关联的信息。 我应该根据信息将多个表细分为几类,还是只有一个表包含许多列? 我过去这样做的方法是拥有多个表,例如,一个表用于应用程序使用情况数据,一个表用于配置文件信息,一个表用于后端令牌等,以使事情看起来井井有条。 最近有人告诉我,最好不要那样做,有一个包含很多列的表也可以。关键是,所有这些列都具有相同

  • 问题内容: 嗨,这是我的情况,我有那些桌子 所以我想总计费用和税款,然后按客户ID分组,这是我的查询 因此,如果我有1个客户费用,而我使用SUM函数时却有2个税额,那么它会计算两次费用,例如,如果要向我显示10 $,则向我显示20 $ 我知道如何通过子查询解决此问题,但是我想知道是否有任何选项可以获取没有子查询之类的正确值,例如我在上面可以使用的修改内容以解决该问题。 谢谢 ! 没有子查询的更新答