首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当订单项目数量相同时,如何使用SUM DISTINCT

当订单项目数量相同时,如何使用SUM DISTINCT
EN

Stack Overflow用户
提问于 2019-07-02 16:46:53
回答 6查看 734关注 0票数 1

我正在处理一个查询,以显示一天内发送的订单总数和发送的项目数量。由于有大量的连接,我有重复的行。它看起来是这样的:

代码语言:javascript
运行
复制
 DispatchDate   Order   Qty 
   2019-07-02       1     2
   2019-07-02       1     2
   2019-07-02       1     2
   2019-07-02       2     2
   2019-07-02       2     2
   2019-07-02       2     2
   2019-07-02       3     5
   2019-07-02       3     5
   2019-07-02       3     5

我使用这个查询:

代码语言:javascript
运行
复制
SELECT DispatchDate, COUNT(DISTINCT Order), SUM(DISTINCT Qty)
FROM TABLE1
GROUP BY DispatchDate

显然,在这一天有3个订单,项目总数为9

但是,查询将返回:

3个订单和7个项目

我不知道如何解决这个问题。如何对每个订单的数量求和,而不是像sum DISTINCT那样简单地从一列中删除重复项

EN

回答 6

Stack Overflow用户

发布于 2019-07-02 17:05:21

可以进行CTE

代码语言:javascript
运行
复制
with cte1 as (
SELECT Order AS Order
    , DispatchDate
    , MAX(QTY) as QTY
FROM FROM TABLE1
GROUP BY Order
    , DispatchDate
)

SELECT DispatchDate
     , COUNT(Order)
     , SUM(Qty)
FROM cte1
GROUP BY DispatchDate
票数 1
EN

Stack Overflow用户

发布于 2019-07-02 19:15:11

如果数据以这种方式存储,那么您的数据模型就有很大的问题。如果是这样的话,您需要一个每个订单一行的表。

如果这是查询的结果,您可能可以修复底层查询,这样就不会得到重复的结果。

如果您需要使用这种格式的数据,则为每个组提取一行。我认为row_number()非常适合用于此目的:

代码语言:javascript
运行
复制
select count(*), sum(qty) 
from (select t.*, row_number() over (partition by dispatchdate, corder order by corder) as seqnum
      from t
     ) t
where seqnum = 1

Here是一个db<>fiddle。

票数 1
EN

Stack Overflow用户

发布于 2019-07-02 17:06:59

首先,您应该避免在链接时重复使用行。例如,使用LEFT JOIN代替JOIN。但是,正如我们所处的那样:

代码语言:javascript
运行
复制
SELECT    DispatchDate,  sum( Qty)
FROM (
SELECT distinct DispatchDate,  Order,  Qty
FROM TABLE1 )T
GROUP BY  DispatchDate

您输入了SUM(DISTINCT Qty),它将Qty的不同值相加,即2和5。这是7,不是吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56848617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档