SQL:优化查询/减小查询的大小
上面的查询看起来并不漂亮。基本上,如果您注意到子查询和主查询中的SQL:优化查询/减小查询的大小,sql,sql-server,Sql,Sql Server,上面的查询看起来并不漂亮。基本上,如果您注意到子查询和主查询中的WHERE条件是相似的。是否有一种方法可以将它们组合起来以减少此查询的大小。还有没有其他地方我可以尝试减少这个查询的大小? 寻找建议。您可以使用求和。。。在总和上的OVER(),以计算总计 SELECT p.Distributor, SUM(r.SalesVolume)
WHERE
条件是相似的。是否有一种方法可以将它们组合起来以减少此查询的大小。还有没有其他地方我可以尝试减少这个查询的大小?
寻找建议。您可以使用
求和。。。在<代码>总和上的OVER()
,以计算总计
SELECT p.Distributor,
SUM(r.SalesVolume) AS Sales,
CAST(( ( CAST(SUM(r.SalesVolume) AS DECIMAL(14, 4)) / (SELECT SUM(r.SalesVolume)
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
WHERE p.Distributor IN( 'TF1', 'WARNER', 'GAUMONT', 'PATHE',
'STUDIOCANAL', 'M6SND', 'FRANCETV' )
AND p.VODEST IN ( 'EST' )
AND p.ContentFlavor IN ( 'HD' )) ) * 100 ) AS DECIMAL(20, 2)) AS MarketSharesVolume
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
WHERE p.Distributor IN ( 'TF1', 'WARNER', 'GAUMONT', 'PATHE',
'STUDIOCANAL', 'M6SND', 'FRANCETV' )
AND p.VODEST IN ( 'EST' )
AND p.ContentFlavor IN ( 'HD' )
GROUP BY p.Distributor;
非常好,谢谢。但是我想知道这个函数是如何工作的?如果可能的话,也许你可以简单地解释一下。@MartinSmith。
cast()
s是非常无用的,因为SQL Server在比率的比例和精度方面遵循自己的规则。@GordonLinoff-刚从OP中复制。@TauseefHussain-
SELECT p.Distributor,
SUM(r.SalesVolume) AS Sales,
CAST(( ( CAST(SUM(r.SalesVolume) AS DECIMAL(14, 4)) / SUM(SUM(r.SalesVolume))
OVER() ) * 100 ) AS DECIMAL(20, 2)) AS MarketSharesVolume
FROM RawData r
INNER JOIN Product p
ON r.ProductId = p.ProductId
WHERE p.Distributor IN ( 'TF1', 'WARNER', 'GAUMONT', 'PATHE',
'STUDIOCANAL', 'M6SND', 'FRANCETV' )
AND p.VODEST IN ( 'EST' )
AND p.ContentFlavor IN ( 'HD' )
GROUP BY p.Distributor;