【问题标题】:get distinct records in sql在sql中获取不同的记录
【发布时间】:2012-02-08 10:41:35
【问题描述】:

我编写了以下查询来获取客户电子邮件地址、订单数量(即客户下了多少订单)、订单总价。但我得到了重复的结果。

我想要不同的记录,例如:

客户 A,5 个订单,总计 125 美元 客户 B,2 个订单,总计 150 美元

但我得到的结果如下:

客户 A,4 个订单,总计 100 美元 客户 A,1 个订单,总计 25 美元 客户 B,1 个订单,总计 100 美元 客户 B,1 个订单,总计 50 美元

你能帮我怎样才能得到我想要的结果。我写了以下查询:

    Select 
    customers.CustomerID,
    customers.EmailAddress,
    COUNT(Orders.OrderID) AS Ordercount,
    Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from 
    customers 
    INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID 
    INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY 
    customers.CustomerID,
    customers.EmailAddress,
    Orders.OrderID,
    OrderDetails.TotalPrice,
    OrderDetails.Quantity 
ORDER BY customers.CustomerID, orders.OrderID desc

【问题讨论】:

  • 为什么你的group by中有customerID,却没有选中?
  • 对不起,我发布了错误的查询,我的查询如下:Select customers.CustomerID,customers.EmailAddress,COUNT(Orders.OrderID) AS Ordercount,Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice from客户 INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID GROUP BY customers.CustomerID,customers.EmailAddress,Orders.OrderID,OrderDetails.TotalPrice,OrderDetails.Quantity ORDER BY customers.CustomerID, orders.OrderID 描述

标签: sql


【解决方案1】:

您只需要group by 选择中的字段而不是COUNTSUM 的一部分

Select 
    customers.CustomerID,
    customers.EmailAddress,
    COUNT(Orders.OrderID) AS Ordercount,
    Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice 
from 
    customers 
    INNER JOIN 
    Orders ON customers.CustomerID = Orders.CustomerID 
    INNER JOIN 
    OrderDetails ON OrderDetails.OrderID = Orders.OrderID 
GROUP BY 
    customers.CustomerID,
    customers.EmailAddress
ORDER BY 
    customers.CustomerID desc

【讨论】:

  • 但我收到以下错误:“Orders.OrderID”列在 ORDER BY 子句中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。如果我不包括它。
  • 好的,只需按客户 ID 订购即可。如果您希望顶部的订单最多,则按 COUNT(Orders.OrderID) 排序
【解决方案2】:

按订单 ID 等列分组和排序是问题 - 尝试:

Select customers.CustomerID,
       max(customers.EmailAddress) AS EmailAddress,
       COUNT(Orders.OrderID) AS Ordercount,
       Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice
from customers
INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID
INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID
GROUP BY customers.CustomerID
ORDER BY customers.CustomerID

【讨论】:

    【解决方案3】:

    问题还在GROUP BY部分,试试这样:

    Select customers.CustomerID,
           customers.EmailAddress,
           COUNT(Orders.OrderID) AS Ordercount,
           Sum(OrderDetails.TotalPrice * OrderDetails.Quantity) AS TotalPrice
    from customers
    INNER JOIN Orders ON customers.CustomerID = Orders.CustomerID
    INNER JOIN OrderDetails ON OrderDetails.OrderID = Orders.OrderID
    GROUP BY customers.CustomerID,
             customers.EmailAddress
    ORDER BY customers.CustomerID, COUNT(Orders.OrderID) desc
    

    【讨论】:

    • 我发布了错误的查询,您可以在评论中的正确查询上方查看。
    • 我收到以下错误:“Orders.OrderID”列在 ORDER BY 子句中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。
    • @user818671 确实,使用我现在放的。
    • @user818671 是否按预期工作?如果是这样,您应该投票并accept the answer :)
    猜你喜欢
    • 1970-01-01
    • 2014-01-06
    • 1970-01-01
    • 2018-07-10
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多