【问题标题】:Include Column in SELECT not in Group By在 SELECT 中包含列而不在 Group By 中
【发布时间】:2016-01-03 14:43:39
【问题描述】:

我有两个表:Order 和 Order_Item。

Order 有列:
1) Order_Id 整数
2) Order_Time 日期

Order_Item 有列:
1) Order_Item_Id 整数
2) Order_Id 整数(FK)
3) Order_Quantity 整数
4) Product_Id (FK) // 来自产品表(Product_Id,Product_Name,Product_Price)

我想写一个这样的查询:

SELECT Product_Id , COUNT(Product_Id)*Order_Quantity
FROM Order_Item, Order
WHERE Order.Date BETWEEN '31-dec-2015' 和 '2016 年 1 月 5 日'
AND Order_Item.Order_Id =Order.Order_Id
组 BY OrderItem.Product_Id ;

结果应如下所示:

Product_Id   Number_of_orders_from_customers
1                  23
2                  45

我找到了很多解决方案(例如 Efficiently Include Column not in Group By of SQL Query),但问题是我使用 GROUP BY 从查询中订购了数量。

有什么解决办法吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你的意思是这样吗?

    SELECT Product_Id , COUNT(*) AS Number_of_orders_from_customers
    FROM Order_Item, Order 
    WHERE Order.Date BETWEEN '31-dec-2015' and '5-jan-2016'
    AND Order_Item.Order_Id =Order.Order_Id
    GROUP BY OrderItem.Product_Id ;
    

    【讨论】:

      【解决方案2】:

      我认为您需要sum,以及正确的连接语法、表别名和标准日期格式:

      SELECT oi.Product_Id , SUM(oi.Order_Quantity)
      FROM Order_Item oi JOIN
           `Order` o
           ON oi.Order_Id = o.Order_Id
      WHERE o.OrderTime BETWEEN '2015-12-31' and '2015-01-05'
      GROUP BY oi.Product_Id ;
      

      【讨论】:

      • 是的,这正是我所需要的。谢谢!
      猜你喜欢
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多