DUKESQLMOOC10203中没有更多的假脱机空间
我得到这个错误: DUKESQLMOOC10203中没有更多的假脱机空间DUKESQLMOOC10203中没有更多的假脱机空间,sql,teradata,Sql,Teradata,我得到这个错误: DUKESQLMOOC10203中没有更多的假脱机空间 正如其他人所指出的,您的查询没有写出来的意义。您正在生成一个中间结果集/子查询,其中包含deptinfo.dept、deptinfo.deptdesc、skuinfo.brand、skuinfo.style和skuinfo.color的每个不同组合的总和(trnsact.amt) 到目前为止一切都很好。如果您想获得具有最大的总和(trnsact.amt)的部门,您可以使用按总数排序的方法对该子查询的结果进行排序,并在该查询
正如其他人所指出的,您的查询没有写出来的意义。您正在生成一个中间结果集/子查询,其中包含
deptinfo.dept、deptinfo.deptdesc、skuinfo.brand、skuinfo.style和skuinfo.color的每个不同组合的总和(trnsact.amt)
到目前为止一切都很好。如果您想获得具有最大的总和(trnsact.amt)
的部门,您可以使用按总数排序的方法对该子查询的结果进行排序
,并在该查询开始时使用选择前1名的方法仅选择一条记录:
select deptinfo.dept, deptinfo.deptdesc, skuinfo.brand, skuinfo.style, skuinfo.color, max(total) from
(select deptinfo.dept, deptinfo.deptdesc, skuinfo.brand, skuinfo.style, skuinfo.color, sum(trnsact.amt) as total
from deptinfo
inner join skuinfo
on deptinfo.dept = skuinfo.dept
inner join trnsact
on skuinfo.sku = trnsact.sku
where stype = 'R'
group by 1,2,3,4,5) as a
group by 1,2,3,4,5
order by 6 desc;
可以使用QUALIFY
语句代替按总描述排序。如果您有多条“TOP”记录具有相同的总和(trnsact.amt)
,则此选项非常有用。第一次查询每次都可能返回不同的结果,因为无法说明“如果有多个部门/品牌/风格/颜色组合具有相同的总和(trnsact.amt),则选择具有最高deptinfo.dept
number的记录”。使用Qualife来执行此操作的方式如下所示:
SELECT TOP 1
deptinfo.dept,
deptinfo.deptdesc,
skuinfo.brand,
skuinfo.style,
skuinfo.color,
sum(trnsact.amt) AS total
FROM deptinfo
INNER JOIN skuinfo ON deptinfo.dept = skuinfo.dept
INNER JOIN trnsact ON skuinfo.sku = trnsact.sku
WHERE stype = 'R'
GROUP BY 1,2,3,4,5
ORDER BY total DESC;
查询中spool空间不足的最可能原因是,第一次选择引用了表名,但这些表名仅在子查询的上下文中。通过在第一个SELECT中再次命名表,您导致了交叉连接,实际上是将deptinfo
中的每条记录与skuinfo
中的每条记录与trnsact
中的每条记录与子查询中的每条记录连接在一起,即使您的表很小。这也不是你想要的
使用子查询时,外部SELECT、WHERE、ORDER BY、GROUP BY和QUIRITY引用您为子查询提供的别名,如下所示(使用上面两个查询中的一个来获得结果,这只是如何使用子查询的示例):
正如我上面提到的,这仍然无法得到您想要的结果,但至少您现在可以运行它,看看为什么结果与您的期望不符。对我来说,执行您的子查询没有意义。你想在这里干什么?还有,你的桌子有多大?你能给我解释一下吗?外部组BY无效,它返回的结果与内部组完全相同。你到底想做什么?在子查询中完成trnsact的joinsum之前,计算trnsact
上的总和可能更有效,然后我要最大化该总和哪个部门(带部门描述)、品牌、风格和颜色的退货项目的总价值最大?这是一个基本的问题,它要么是一个selecttop1withties。。。按总描述排序
或限定排名()超过(按总描述排序)=1
。当有多行具有相同的max total时,这两行都将返回所有这些。另外一行用于发现由于表名不正确而导致的产品联接:-)顺便说一句,TOP with TIES
类似于RANK
SELECT
deptinfo.dept,
deptinfo.deptdesc,
skuinfo.brand,
skuinfo.style,
skuinfo.color,
sum(trnsact.amt) AS total
FROM deptinfo
INNER JOIN skuinfo ON deptinfo.dept = skuinfo.dept
INNER JOIN trnsact ON skuinfo.sku = trnsact.sku
WHERE stype = 'R'
GROUP BY 1,2,3,4,5
QUALIFY ROW_NUMBER() OVER (ORDER BY total DESC, dept DESC) = 1;
select a.dept, a.deptdesc, a.brand, a.style, a.color, max(total) from
(select deptinfo.dept, deptinfo.deptdesc, skuinfo.brand, skuinfo.style, skuinfo.color, sum(trnsact.amt) as total
from deptinfo
inner join skuinfo
on deptinfo.dept = skuinfo.dept
inner join trnsact
on skuinfo.sku = trnsact.sku
where stype = 'R'
group by 1,2,3,4,5) as a
group by 1,2,3,4,5
order by 6 desc;