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

选择联接查询中不同行的总和

欧阳子石
2023-03-14

我有两张桌子,订单和订单项。我正在按日期制作销售报告,其中需要包括每个订单项目在每个日期的总成本价格和销售价格,以及每个订单在每个日期的总交付成本:

表:订单

orderid    date          deliverycost
1          2000-01-01    5
2          2000-01-01    3
3          2000-01-02    0
4          2000-01-02    4

表:orderitem

orderitemdid    orderid    costprice    sellingprice
1               1          10           12
2               1          2            4
3               2          10           12
4               3          5            6
5               3          4            10
6               4          1            2

我正在寻找一个查询,它将提供以下输出:

date          costprice   sellingprice   deliverycost
2000-01-01    22          28             8    
2000-01-02    10          18             4

我尝试了以下SQL:

        SELECT
            SUM(`orderitem`.`costprice`) AS `costprice`,
            SUM(`orderitem`.`sellingprice`) AS `sellingprice`,
            SUM(`order`.`delivery`) AS `delivery`,
            DATE(`order`.`date`) AS `date`,
        FROM
            `order`
        INNER JOIN
            `orderitem`
        ON
            (`order`.`orderid` = `orderitem`.`orderid`)
        GROUP BY
            `date`
        ORDER BY
            `date`

问题是,我最终得到的交货价格乘以订单项目的数量,因此我希望对订单进行求和()<代码>交付在连接发生之前。

共有1个答案

燕琛
2023-03-14

可能与引号使用不当有关列名不要使用单引号,但需要时使用反引号

   SELECT
        SUM(`orderitem`.`costprice`) as costprice,
        SUM(`orderitem`.`sellingprice`) as sellingprice,
        SUM(`order`.`delivery`) as delivery,
        DATE(`order`.`confirmdate`) as `date`,
    FROM  `order`
    INNER JOIN  `orderitem`    ON `order`.`orderid` = `orderitem`.`orderid`
    GROUP BY  `date`
    ORDER BY `date`

在您的情况下,还应该避免回退,因为您没有单独的列名和保留字

   SELECT
        SUM(orderitem.costprice) as costprice,
        SUM(orderitem.sellingprice) as sellingprice,
        SUM(order.delivery) as delivery,
        DATE(order.confirmdate) as date,
    FROM  order
    INNER JOIN  orderitem    ON order.orderid = orderitem.orderid
    GROUP BY  date
    ORDER BY date

为了避免笛卡尔积,可以加入聚合表

   SELECT
        SUM(t.costprice) as costprice,
        SUM(t.sellingprice) as sellingprice,
        SUM(order.delivery) as delivery,
        DATE(order.confirmdate) as date,
    FROM  order
    INNER JOIN  (
    SELECT 
        orderitem.orderid
        SUM(orderitem.costprice) as costprice,
        SUM(orderitem.sellingprice) as sellingprice
        from orderitem
        group by  orderitem.orderid
      ) t ON order.orderid = t.orderid
    GROUP BY  date
    ORDER BY date
 类似资料:
  • 我想从short_name(国家名称)、name(州表)或region_name的任何可用数据中选择post_id。对region_name而不是short_name(国家名称),name(州表)执行以下查询,结果为真。 请告诉我,我哪里弄错了!

  • 问题内容: 我有两个mysql表-销售表: 和一个项目表: sales表包含每个 ItemID的 多个记录-每个 SaleWe​​ek一个 。我想通过加入两个表来选择出售的所有商品,如下所示: 但是,这将基于每个 SaleWe​​ek* 的多个条目返回多个 ItemId 值。我可以做一个单独的选择,只返回一个 ItemID 吗?-我不想查询最新的 SaleWe​​ek, 因为有些项目可能没有最新的

  • 我有一个表,其中有多个条目对应一个FK。我想找出没有某些条目的FK值,例如 我的表有以下条目。 现在,我想从这个表中过滤所有没有ab3或ab4的FK。当然,我期望不同的值,即在这种情况下,结果将是FK=100和200。 我使用的查询是 当然,此查询不会获取所需的结果。

  • 问题内容: 我有一个查询,可以从弹性索引中获取一些用户发布的数据。我对该查询感到满意,尽管我需要使其返回具有唯一用户名的行。当前,它显示用户的相关帖子,但是可能显示一个用户两次。 我已经阅读了有关聚合的内容,但了解得不多(也尝试使用aggs但也没有用)....非常感谢您的帮助 问题答案: 您将需要使用术语汇总来获取所有唯一身份用户,然后使用热门匹配来针对每个用户仅获取一个结果。这就是它的样子。 在

  • 问题内容: 我被困住了…一个带有“值”和“数据类型”列的“数据”表填充有发动机负载和车辆速度,每个记录都标有日期,时间,经纬度,长时戳。我想查询车辆行驶时发动机负载是否超过10%(例如,速度> 0)。我可以创建查询来选择发动机负载,也可以创建查询来选择车速,但是当> 10%并且车辆移动时,如果日期,时间和时间长,如何创建查询来选择发动机负载?相等吗? 此查询不起作用,但是它提供了我要尝试执行的操作

  • 问题内容: 我正在尝试检索字段中所有唯一值的计数。 示例SQL: 如何在CodeIgniter内部进行这种查询? 我知道我可以使用,并编写自己的SQL查询,但是我还有其他要求。如果我使用,我必须自己编写整个查询。 问题答案: 然后 应该走很长的路要走。