Teradata SQL 在 GROUP BY 中具有非聚合字段
Teradata SQL with non-aggregated fields in GROUP BY
我有下面的代码,Teradata 将无法工作,return 消息为 'Selected non-aggregate values must be part of the associated group.' 我想我已经确保所有非聚合字段都已放入 GROUP BY 子句中.你能帮我看看为什么它不起作用吗?
SELECT str.store,str.city, str.state, dep.deptdesc, 100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) AS PercentageChange
FROM ((skuinfo sku LEFT JOIN deptinfo dep ON sku.dept=dep.dept)
LEFT JOIN
(SELECT t.sku, t.store, COUNT(DISTINCT t.saledate) AS NumOfDays, SUM(t.amt) AS DailyTotal,
(CAST(EXTRACT(YEAR FROM t.saledate) AS VARCHAR(8)))||'.'||
(CAST(EXTRACT(MONTH FROM t.saledate) AS VARCHAR(8)))||'.'||
(CAST(t.store AS VARCHAR(8)))AS ComboID,
SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.Amt END) AS NovSales,
SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.Amt END) AS DecSales,
COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.saledate END) AS NovSaleDays,
COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.saledate END) AS DecSaleDays
FROM trnsact t
WHERE (t.saledate NOT BETWEEN '2005-08-01' AND '2005-08-31') AND t.stype='P'
GROUP BY t.sku, t.store
HAVING NumOfDays>19) Clean
ON sku.sku=Clean.sku)
LEFT JOIN strinfo str ON str.store=Clean.store
GROUP BY str.store,str.city, str.state, dep.deptdesc;
这是你的 SELECT
:
SELECT str.store, str.city, str.state, dep.deptdesc,
(100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) ) AS PercentageChange
这是你的 GROUP BY
:
GROUP BY str.store, str.city, str.state, dep.deptdesc
我在 SELECT
中看到很多在 GROUP BY
中没有的列引用。我猜你打算 SELECT
像这样:
SELECT str.store, str.city, str.state, dep.deptdesc,
SUM(100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays)
) AS PercentageChange
或者在外部查询中根本没有 GROUP BY
。
删除外部查询中的 GROUP BY
。将派生的 table Clean
中的 GROUP BY
替换为序数 GROUP BY 1, 2, 5
。
有些事情让我相信派生的 table 的列 ComboID
,由 SaleDate
和 StoreID
组成,因为 SaleDate
不是 GROUP BY
但正在别处参与派生的聚合 table.
我有下面的代码,Teradata 将无法工作,return 消息为 'Selected non-aggregate values must be part of the associated group.' 我想我已经确保所有非聚合字段都已放入 GROUP BY 子句中.你能帮我看看为什么它不起作用吗?
SELECT str.store,str.city, str.state, dep.deptdesc, 100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) AS PercentageChange
FROM ((skuinfo sku LEFT JOIN deptinfo dep ON sku.dept=dep.dept)
LEFT JOIN
(SELECT t.sku, t.store, COUNT(DISTINCT t.saledate) AS NumOfDays, SUM(t.amt) AS DailyTotal,
(CAST(EXTRACT(YEAR FROM t.saledate) AS VARCHAR(8)))||'.'||
(CAST(EXTRACT(MONTH FROM t.saledate) AS VARCHAR(8)))||'.'||
(CAST(t.store AS VARCHAR(8)))AS ComboID,
SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.Amt END) AS NovSales,
SUM(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.Amt END) AS DecSales,
COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =11 THEN t.saledate END) AS NovSaleDays,
COUNT(CASE WHEN EXTRACT(MONTH from t.saledate) =12 THEN t.saledate END) AS DecSaleDays
FROM trnsact t
WHERE (t.saledate NOT BETWEEN '2005-08-01' AND '2005-08-31') AND t.stype='P'
GROUP BY t.sku, t.store
HAVING NumOfDays>19) Clean
ON sku.sku=Clean.sku)
LEFT JOIN strinfo str ON str.store=Clean.store
GROUP BY str.store,str.city, str.state, dep.deptdesc;
这是你的 SELECT
:
SELECT str.store, str.city, str.state, dep.deptdesc,
(100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays) ) AS PercentageChange
这是你的 GROUP BY
:
GROUP BY str.store, str.city, str.state, dep.deptdesc
我在 SELECT
中看到很多在 GROUP BY
中没有的列引用。我猜你打算 SELECT
像这样:
SELECT str.store, str.city, str.state, dep.deptdesc,
SUM(100*(Clean.DecSales/Clean.DecSaleDays-Clean.NovSales/Clean.NovSaleDays)/(Clean.NovSales/Clean.NovSaleDays)
) AS PercentageChange
或者在外部查询中根本没有 GROUP BY
。
删除外部查询中的 GROUP BY
。将派生的 table Clean
中的 GROUP BY
替换为序数 GROUP BY 1, 2, 5
。
有些事情让我相信派生的 table 的列 ComboID
,由 SaleDate
和 StoreID
组成,因为 SaleDate
不是 GROUP BY
但正在别处参与派生的聚合 table.