这是查询: 计算科罗拉多州库存的扩展成本的累积分布(以客户状态为条件)。结果应包含扩展成本和累积距离,按扩展成本排序。您应该消除结果中的重复行。
`我的作品:
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;`
问题: 是否有另一种方法可以使用当前课程来消除重复行?我们的课程是关于分析函数的,其中涉及排名、分区、报告比率、累积分布、文本编号行、窗口概念、无界前行行等。
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;
避免使用逗号连接,它们难以理解,容易出错,基本上已被弃用。