我使用不同的函数而不是使用我们当前的课程是否正确?

问题描述 投票:0回答:1

这是查询: 计算科罗拉多州库存的扩展成本的累积分布(以客户状态为条件)。结果应包含扩展成本和累积距离,按扩展成本排序。您应该消除结果中的重复行。

`我的作品:

SELECT DISTINCT extCost,
       CUME_DIST() OVER (ORDER BY extCost) AS CumeDist_ExtendedCost
FROM inventory_fact if, cust_vendor_dim cv
 WHERE if.custVendorKey = cv.custVendorKey
  AND cv.state = 'CO'
ORDER BY extCost;`

问题: 是否有另一种方法可以使用当前课程来消除重复行?我们的课程是关于分析函数的,其中涉及排名、分区、报告比率、累积分布、文本编号行、窗口概念、无界前行行等。

sql mysql db2
1个回答
0
投票

DISTINCT
不是函数。它的作用就像所有列上的一个巨大的
GROUP BY
,因此服务器将尝试区分所有列,包括您创建的新分析列,而没有意识到它已经是不同的。

使用子查询/派生表并执行手动

GROUP BY
会更有效。

SELECT
  ec.extCost,
  MIN(ec.CumeDist_ExtendedCost) AS CumeDist_ExtendedCost
FROM (
    SELECT
      extCost,
      CUME_DIST() OVER (ORDER BY extCost) AS CumeDist_ExtendedCost
    FROM inventory_fact if
    JOIN cust_vendor_dim cv ON if.custVendorKey = cv.custVendorKey
    WHERE cv.state = 'CO'
) ec
GROUP BY
  ec.extCost
ORDER BY
  ec.extCost;

避免使用逗号连接,它们难以理解,容易出错,基本上已被弃用。

© www.soinside.com 2019 - 2024. All rights reserved.