Teradata - 此查询有什么问题? "Selected non-aggregate values must be part of the associated group."
Teradata - What is wrong with this query? "Selected non-aggregate values must be part of the associated group."
我目前正在使用 teradata 解决 sql 问题,但我一直收到错误消息,尽管我找不到任何问题。
这是我的查询:
SELECT TOP 10 d.deptdesc, tt.store, SUM(tt.amt11) AS sum11, SUM(tt.amt12) AS sum12,
SUM(tt.num11) AS num11, SUM(tt.num12) AS num12,
sum11/num11 AS avg11, sum12/num12 AS avg12,
(avg12-avg11)/avg11 * 100 AS increase
FROM(SELECT store,
SUM(CASE monthId WHEN 11 THEN total_revenue END) AS amt11,
SUM(CASE monthId WHEN 12 THEN total_revenue END) AS amt12,
SUM(CASE monthId WHEN 11 THEN date_num END) AS num11,
SUM(CASE monthId WHEN 12 THEN date_num END) AS num12
FROM(SELECT EXTRACT(MONTH FROM saledate) AS monthId,
EXTRACT(YEAR FROM saledate) AS yearId,
store,
SUM(amt) AS total_revenue,
COUNT(DISTINCT saledate) AS date_num
FROM trnsact
WHERE stype = 'P' AND NOT(monthId = '8' AND yearId = '2005')
GROUP BY monthId, yearId, store
HAVING date_num >= 20) t
GROUP BY store) tt
INNER JOIN (SELECT sku, store FROM trnsact) ttt ON tt.store = ttt.store
INNER JOIN skuinfo sku ON ttt.sku = sku.sku
INNER JOIN deptinfo d ON sku.dept = d.dept
GROUP BY d.deptdesc, tt.store
HAVING sum11 > 1000 AND sum12 > 1000
ORDER BY increase DESC;
Teradata 发出这样的消息
Error Code - 3504
Error Message - [Teradata Database] [TeraJDBC 15.10.00.05] [Error 3504] [SQLState HY000] Selected non-aggregate values must be part of the associated group.
你能给我什么建议吗?
提前致谢!
解析器检查您为聚合设置别名的非聚合列,但
您不能直接在 select 中为 select 列使用别名,因此您应该使用 :
SELECT TOP 10
d.deptdesc
, tt.store
, SUM(tt.amt11) AS sum11
, SUM(tt.amt12) AS sum12
, SUM(tt.num11) AS num11
, SUM(tt.num12) AS num12
, SUM(tt.amt11)/SUM(tt.num11) AS avg11
, SUM(tt.amt12)/SUM(tt.num12) AS avg12
, (SUM(tt.amt12)/SUM(tt.num12)-SUM(tt.amt11)/SUM(tt.num11))/SUM(tt.amt11)/SUM(tt.num11) * 100 AS increase
....
使用这个查询:
SELECT TOP 10 deptdesc, store, sum11, sum12, num11, num12,
sum11/num11 AS avg11, sum12/num12 AS avg12,
((sum12/num12)-(sum11/num11))/(sum11/num11)* 100 AS increase FROM
(
SELECT d.deptdesc, tt.store, SUM(tt.amt11) AS sum11, SUM(tt.amt12) AS sum12,
SUM(tt.num11) AS num11, SUM(tt.num12) AS num12
FROM(SELECT store,
SUM(CASE monthId WHEN 11 THEN total_revenue END) AS amt11,
SUM(CASE monthId WHEN 12 THEN total_revenue END) AS amt12,
SUM(CASE monthId WHEN 11 THEN date_num END) AS num11,
SUM(CASE monthId WHEN 12 THEN date_num END) AS num12
FROM(SELECT EXTRACT(MONTH FROM saledate) AS monthId,
EXTRACT(YEAR FROM saledate) AS yearId,
store,
SUM(amt) AS total_revenue,
COUNT(DISTINCT saledate) AS date_num
FROM trnsact
WHERE stype = 'P' AND NOT(monthId = '8' AND yearId = '2005')
GROUP BY monthId, yearId, store
HAVING date_num >= 20) t
GROUP BY store) tt
INNER JOIN (SELECT sku, store FROM trnsact) ttt ON tt.store = ttt.store
INNER JOIN skuinfo sku ON ttt.sku = sku.sku
INNER JOIN deptinfo d ON sku.dept = d.dept
GROUP BY d.deptdesc, tt.store
) AS T
GROUP BY deptdesc, tt.store, sum11, sum12, num11, num12
HAVING sum11 > 1000 AND sum12 > 1000
ORDER BY increase DESC;
我目前正在使用 teradata 解决 sql 问题,但我一直收到错误消息,尽管我找不到任何问题。 这是我的查询:
SELECT TOP 10 d.deptdesc, tt.store, SUM(tt.amt11) AS sum11, SUM(tt.amt12) AS sum12,
SUM(tt.num11) AS num11, SUM(tt.num12) AS num12,
sum11/num11 AS avg11, sum12/num12 AS avg12,
(avg12-avg11)/avg11 * 100 AS increase
FROM(SELECT store,
SUM(CASE monthId WHEN 11 THEN total_revenue END) AS amt11,
SUM(CASE monthId WHEN 12 THEN total_revenue END) AS amt12,
SUM(CASE monthId WHEN 11 THEN date_num END) AS num11,
SUM(CASE monthId WHEN 12 THEN date_num END) AS num12
FROM(SELECT EXTRACT(MONTH FROM saledate) AS monthId,
EXTRACT(YEAR FROM saledate) AS yearId,
store,
SUM(amt) AS total_revenue,
COUNT(DISTINCT saledate) AS date_num
FROM trnsact
WHERE stype = 'P' AND NOT(monthId = '8' AND yearId = '2005')
GROUP BY monthId, yearId, store
HAVING date_num >= 20) t
GROUP BY store) tt
INNER JOIN (SELECT sku, store FROM trnsact) ttt ON tt.store = ttt.store
INNER JOIN skuinfo sku ON ttt.sku = sku.sku
INNER JOIN deptinfo d ON sku.dept = d.dept
GROUP BY d.deptdesc, tt.store
HAVING sum11 > 1000 AND sum12 > 1000
ORDER BY increase DESC;
Teradata 发出这样的消息
Error Code - 3504
Error Message - [Teradata Database] [TeraJDBC 15.10.00.05] [Error 3504] [SQLState HY000] Selected non-aggregate values must be part of the associated group.
你能给我什么建议吗? 提前致谢!
解析器检查您为聚合设置别名的非聚合列,但 您不能直接在 select 中为 select 列使用别名,因此您应该使用 :
SELECT TOP 10
d.deptdesc
, tt.store
, SUM(tt.amt11) AS sum11
, SUM(tt.amt12) AS sum12
, SUM(tt.num11) AS num11
, SUM(tt.num12) AS num12
, SUM(tt.amt11)/SUM(tt.num11) AS avg11
, SUM(tt.amt12)/SUM(tt.num12) AS avg12
, (SUM(tt.amt12)/SUM(tt.num12)-SUM(tt.amt11)/SUM(tt.num11))/SUM(tt.amt11)/SUM(tt.num11) * 100 AS increase
....
使用这个查询:
SELECT TOP 10 deptdesc, store, sum11, sum12, num11, num12,
sum11/num11 AS avg11, sum12/num12 AS avg12,
((sum12/num12)-(sum11/num11))/(sum11/num11)* 100 AS increase FROM
(
SELECT d.deptdesc, tt.store, SUM(tt.amt11) AS sum11, SUM(tt.amt12) AS sum12,
SUM(tt.num11) AS num11, SUM(tt.num12) AS num12
FROM(SELECT store,
SUM(CASE monthId WHEN 11 THEN total_revenue END) AS amt11,
SUM(CASE monthId WHEN 12 THEN total_revenue END) AS amt12,
SUM(CASE monthId WHEN 11 THEN date_num END) AS num11,
SUM(CASE monthId WHEN 12 THEN date_num END) AS num12
FROM(SELECT EXTRACT(MONTH FROM saledate) AS monthId,
EXTRACT(YEAR FROM saledate) AS yearId,
store,
SUM(amt) AS total_revenue,
COUNT(DISTINCT saledate) AS date_num
FROM trnsact
WHERE stype = 'P' AND NOT(monthId = '8' AND yearId = '2005')
GROUP BY monthId, yearId, store
HAVING date_num >= 20) t
GROUP BY store) tt
INNER JOIN (SELECT sku, store FROM trnsact) ttt ON tt.store = ttt.store
INNER JOIN skuinfo sku ON ttt.sku = sku.sku
INNER JOIN deptinfo d ON sku.dept = d.dept
GROUP BY d.deptdesc, tt.store
) AS T
GROUP BY deptdesc, tt.store, sum11, sum12, num11, num12
HAVING sum11 > 1000 AND sum12 > 1000
ORDER BY increase DESC;