【问题标题】:Join two queries with sum of fields as total加入两个查询,字段总和为总数
【发布时间】:2018-12-22 06:53:09
【问题描述】:

我有两个查询来计算同一数据库中所有产品的销售和其他服务的销售额,我想知道是否可以将这 2 个查询合并为一个。不是因为它们只是查询,还因为它们求和。我最好在这里展示示例

查询 1

SELECT SUM(totalone) AS `total` FROM `sold_products` 
WHERE `date`=DATE(NOW()) AND `payment_method`='cash'

查询 2

SELECT SUM(totaltwo) AS `total` FROM `sold_services` 
WHERE `date`=DATE(NOW()) AND `payment_method`='cash'

现在我在我的 PHP 代码中添加了这两个值。它工作正常,但我只想知道如何在一个查询中执行此操作。我总是查询相同的付款方式和相同的日期,但只是同一个数据库中的两个不同的表。

有什么建议吗?

【问题讨论】:

标签: mysql


【解决方案1】:

您可以使用 UNION 然后对这些值求和,如下所示:

SELECT SUM(total) FROM (
    SELECT totalone AS `total` FROM `sold_products` 
        WHERE `date`=DATE(NOW()) AND `payment_method`='cash'
    UNION ALL
    SELECT totaltwo AS `total` FROM `sold_services` 
        WHERE `date`=DATE(NOW()) AND `payment_method`='cash'
)

确保使用UNION ALL 而不是UNION,否则您最终会丢弃total 列中的所有重复值,从而得出错误的总和。

【讨论】:

  • 我忘记了第一个查询是sum totalone,第二个是sum totaltwo,在那种情况下会怎样?你的答案似乎是一个。谢谢
  • 我已经更新了我的答案。基本上,您获取所需的任何列并将其重命名为total,因为 UNION 要求您的两个查询具有相同的架构。我希望这是有道理的。
【解决方案2】:

您想要的是 UNION 运算符。您可以将这两个查询合并为一个。

SELECT SUM(total) AS `total` FROM (
SELECT `total` FROM `sold_products` 
WHERE `date`='$today' AND `payment_method`='cash'
UNION
SELECT `total` FROM `sold_services` 
WHERE `date`='$today' AND `payment_method`='cash')

这是一篇包含更多关于 MySQL UNION 信息的文章: http://www.mysqltutorial.org/sql-union-mysql.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多