首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图避免使用查询中的聚合进行双重全扫描

试图避免使用查询中的聚合进行双重全扫描
EN

Code Review用户
提问于 2014-07-29 17:50:45
回答 1查看 64关注 0票数 6

我有一个统计数据查询,我试图运行下表:

代码语言:javascript
运行
复制
CREATE TABLE "*****"."RUN_D" 
(   
"WHSE_CODE" CHAR(12 BYTE), 
"RUN_NUM" NUMBER(*,0), 
"SHEET_NUM" NUMBER(*,0), 
"SHEET_SEQ" NUMBER(*,0), 
"COUNT_DATE" DATE, 
"COUNTED" CHAR(1 BYTE), 
"ITEM_NUM" CHAR(30 BYTE), 
"BIN_CODE" CHAR(10 BYTE), 
"STOCK_UOM" CHAR(10 BYTE), 
"ON_HAND" NUMBER(12,3), 
"SNAP_COST" NUMBER(15,5), 
"COUNTED_OH" NUMBER(12,3), 
"COUNTER_NAME" CHAR(20 BYTE), 
"USER_CODE" CHAR(30 BYTE), 
"COUNT_VARIANCE" CHAR(1 BYTE), 
"ORG_CODE" CHAR(2 BYTE), 
"DIV_CODE" CHAR(8 BYTE), 
"LOT_CODE" CHAR(20 BYTE), 
"UPDATED" CHAR(1 BYTE)
)

我有以下正确的查询,但EXPLAIN PLAN告诉我,它需要双表扫描,这是我试图避免的。

查询:

代码语言:javascript
运行
复制
SELECT 
  tot.run_num, tot.whse_code, TRUNC(tot.count_date) AS Count_Date,
  CAST((vary.Variance_Count / COUNT(tot.item_num) * 100) AS DECIMAL(10,2)) AS Percentage_Count_Variance,  
  CAST((vary.Variance_Cost / SUM(tot.snap_cost * tot.on_hand) * 100) AS DECIMAL(10,2)) AS Variance_Percentage,  
  CAST(vary.Variance_Cost AS DECIMAL(10,2)) AS Total_Value_Variance
FROM run_d tot
JOIN 
(SELECT run_num, COUNT(item_num) AS Variance_Count, SUM(snap_cost * (counted_oh - on_hand)) AS Variance_Cost
 FROM run_d 
 WHERE counted_oh - on_hand != 0
 GROUP BY run_num) vary ON tot.run_num = vary.run_num 
WHERE TRUNC(tot.count_date) BETWEEN TO_DATE('07/01/2014','MM/DD/YYYY') AND TO_DATE('07/21/2014','MM/DD/YYYY')
GROUP BY tot.run_num, tot.whse_code, vary.Variance_Count, vary.Variance_Cost,   TRUNC(tot.count_date)
ORDER BY tot.whse_code, tot.run_num

是否有更有效的方法来编写这个查询,特别是避免双表扫描?

EN

回答 1

Code Review用户

回答已采纳

发布于 2014-07-29 18:22:22

不,我找不到更好的办法了。组-by约束对于选择是不同的,因此无法将它们合并为一个。

你的代码的其余部分看起来不错,除了我担心你的%计算.它们准确吗?

(vary.Variance_Count / COUNT(tot.item_num) * 100)为小数(10,2)

看起来它将是整数算术,我会把它写成:

代码语言:javascript
运行
复制
(100.0 * vary.Variance_Count / COUNT(tot.item_num)) AS DECIMAL(10,2)
票数 5
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/58420

复制
相关文章

相似问题

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