【问题标题】:MySQL how to sum values when using 3 tablesMySQL如何在使用3个表时对值求和
【发布时间】:2016-05-01 11:40:59
【问题描述】:

这个问题已经困扰我一段时间了。我已经发表了声明,并且它可以按照我想要的方式获取所有数据。

CREATE VIEW `pizza` AS
SELECT 
    `table1`.`id` AS `id`,
    `table1`.`name` AS `name`,
    `table2`.`name` AS `rb_name`,
    `table3`.`netto` AS `min`,
    `table3`.`netto` AS `max`
FROM
    ((`table1`
    JOIN `table3` ON ((`table1`.`id` = `table3`.`id`)))
    JOIN `table2` ON ((`table2`.`t1_id` = `table3`.`t1_id`)))

现在的问题是我想对表中的最小值和最大值求和。但是当我这样做时,我会从一个结果列表变成只有一个结果。 这是我添加到 SELECT 语句中的代码,其中我有最小值和最大值:

        SUM((`table3`.`netto` - `table3`.`tolerance`)) AS `min`,
        SUM((`table3`.`netto` + `table3`.`tolerance`)) AS `max`,

我不知道如何解决它。我的数据库结构如下:

表 1 包含“rb_id”和“rb_name”列。

表 2 有列“id”、“name”和其他未在此处使用的列。

表 3 通过将“rb_id”和“id”与“netto”和“tolerance”值连接起来

【问题讨论】:

  • table3 包含什么?您能更好地解释一下您的数据库结构以及 table3 与 table1 和 table2 的关系吗?

标签: mysql join sum


【解决方案1】:

我认为您需要一个 group by 子句作为聚合函数(sum)

SELECT 
    `table1`.`id` AS `id`,
    `table1`.`name` AS `name`,
    `table2`.`name` AS `rb_name`,
    SUM((`table3`.`netto` - `table3`.`tolerance`)) AS `min`,
    SUM((`table3`.`netto` - `table3`.`tolerance`)) AS `max`,
FROM
    ((`table1`
    JOIN `table3` ON ((`table1`.`id` = `table3`.`id`)))
    JOIN `table2` ON ((`table2`.`t1_id` = `table3`.`t1_id`)))
GROUP BY   `table1`.`id` ,    `table2`.`name` ;

【讨论】:

  • 这正是我所需要的。它现在向我显示了一个结果列表,其中包含每个项目的最小值和最大值的总和。谢谢!!
  • @Kingfox 一个问题:您的`min``max` 列之间有什么区别?它们的计算方式相同。错字?
  • 是的,它是一个错字,但我第一次意识到,在它工作之后:) 我已经编辑了这篇文章,所以它不再包含它了。
猜你喜欢
  • 1970-01-01
  • 2012-03-29
  • 2021-08-11
  • 1970-01-01
  • 2011-03-21
  • 2022-01-03
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多