吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 760|回复: 12
收起左侧

[求助] 关于一段查询语句的优化问题

[复制链接]
huaxinlinux 发表于 2023-10-12 17:46
自用的一段查询语句,总感觉不够简练,想看有没有感兴趣的大佬能怎么优化一下。


select * from
(select round(sum(XF_AMTSOLD)/10000,10) a,
round((sum(XF_AMTSOLD)
-sum(XF_MALLBEARCOUPONAMOUNT)
-sum(XF_STOREBEARCOUPONAMOUNT))/10000,10) b
from xf_transsalesitem t , xf_mdcontracth m
where XF_TXDATE >=trunc(sysdate)
and XF_TXDATE<=trunc(sysdate)
and t.xf_storecode=m.xf_contractno
and XF_BUSINESSTYPE=5),
(select round(sum(XF_AMTSOLD)/10000,10) c,
round((sum(XF_AMTSOLD)
-sum(XF_MALLBEARCOUPONAMOUNT)
-sum(XF_STOREBEARCOUPONAMOUNT))/10000,10) d
from xf_transsalesitem t , xf_mdcontracth m
where XF_TXDATE >=trunc(sysdate,'month')
and XF_TXDATE<=trunc(sysdate)
and t.xf_storecode=m.xf_contractno
and XF_BUSINESSTYPE=5),
(select round(sum(XF_AMTSOLD)/10000,10) e,
round((sum(XF_AMTSOLD)
-sum(XF_MALLBEARCOUPONAMOUNT)
-sum(XF_STOREBEARCOUPONAMOUNT))/10000,10) f
from xf_transsalesitem t , xf_mdcontracth m
where XF_TXDATE >=to_date('20230501','yyyymmdd')
and XF_TXDATE<=trunc(sysdate)
and t.xf_storecode=m.xf_contractno
and XF_BUSINESSTYPE=5)

目的就是按照当天,当月,当年查询两个列的sum。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

开创者 发表于 2023-10-12 19:04
[SQL] 纯文本查看 复制代码
SELECT 
  ROUND(SUM(CASE 
              WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) / 10000, 10) AS today_total_sales,
  ROUND((SUM(CASE 
              WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) - SUM(CASE 
                          WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) THEN XF_MALLBEARCOUPONAMOUNT 
                          ELSE 0 
                      END) - SUM(CASE 
                                    WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) THEN XF_STOREBEARCOUPONAMOUNT 
                                    ELSE 0 
                                END)) / 10000, 10) AS today_net_sales,
  ROUND(SUM(CASE 
              WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE, 'MM') AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) / 10000, 10) AS month_total_sales,
  ROUND((SUM(CASE 
              WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE, 'MM') AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) - SUM(CASE 
                          WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE, 'MM') AND TRUNC(SYSDATE) THEN XF_MALLBEARCOUPONAMOUNT 
                          ELSE 0 
                      END) - SUM(CASE 
                                    WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE, 'MM') AND TRUNC(SYSDATE) THEN XF_STOREBEARCOUPONAMOUNT 
                                    ELSE 0 
                                END)) / 10000, 10) AS month_net_sales,
  ROUND(SUM(CASE 
              WHEN XF_TXDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) / 10000, 10) AS year_total_sales,
  ROUND((SUM(CASE 
              WHEN XF_TXDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TRUNC(SYSDATE) THEN XF_AMTSOLD
              ELSE 0 
          END) - SUM(CASE 
                          WHEN XF_TXDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TRUNC(SYSDATE) THEN XF_MALLBEARCOUPONAMOUNT 
                          ELSE 0 
                      END) - SUM(CASE 
                                    WHEN XF_TXDATE BETWEEN TO_DATE('2023-01-01', 'YYYY-MM-DD') AND TRUNC(SYSDATE) THEN XF_STOREBEARCOUPONAMOUNT 
                                    ELSE 0 
                                END)) / 10000, 10) AS year_net_sales
FROM 
  xf_transsalesitem t, xf_mdcontracth m
WHERE 
  t.xf_storecode = m.xf_contractno 
  AND XF_BUSINESSTYPE = 5;
开创者 发表于 2023-10-12 19:05
对了,这里的日期范围和格式可能需要根据你的需求进行调整。此查询将返回每天、每月和每年的销售总额和净销售总额。
试试看是你需要的不是。
怎么感觉你像我QQ上的一个人呢 ?天天算这东西
头像被屏蔽
zadmg 发表于 2023-10-12 21:06
sai609 发表于 2023-10-12 21:21
为啥不用Python提取,直接复用
zwxtx 发表于 2023-10-12 22:19
非常好非常好非常好非常好
phenoixkaixuan 发表于 2023-10-13 07:21
哈哈,盲猜楼主的项目是传统行业国企,项目里经常看到Oracle数据库的超长SQL
当时实在优化不动的时候,只要不涉及排序分页的,尽量就多次查询然后再让Java层去解决
 楼主| huaxinlinux 发表于 2023-10-15 09:51
phenoixkaixuan 发表于 2023-10-13 07:21
哈哈,盲猜楼主的项目是传统行业国企,项目里经常看到Oracle数据库的超长SQL
当时实在优化不动的时候,只 ...

猜的真准
 楼主| huaxinlinux 发表于 2023-10-15 09:53
开创者 发表于 2023-10-12 19:04
[mw_shl_code=sql,true]SELECT
  ROUND(SUM(CASE
              WHEN XF_TXDATE BETWEEN TRUNC(SYSDATE ...

大神威武,拿来就能用,我得好好学习下
 楼主| huaxinlinux 发表于 2023-10-15 09:57
开创者 发表于 2023-10-12 19:05
对了,这里的日期范围和格式可能需要根据你的需求进行调整。此查询将返回每天、每月和每年的销售总额和净销 ...

我自学了点皮毛,也是整天瞎琢磨,可能不是你说的那个人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:28

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表