我是否需要在 Teradata 的派生 table 中说明所有内容
Do I need to state everything in the derived table in Teradata
我在写查询时遇到了一些困惑:
是否需要在子查询中声明所有内容以便在最外层查询中使用?
我正在计算每个高中毕业率 (msa_high) 组的平均收入,但 teradata 不断提示“选定的非聚合值必须是相关组的一部分。”
感谢任何帮助,非常感谢!
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/COUNT(DISTINCT subquery.saledate) as AvgRevenue
FROM (SELECT s.store, SUM(t.amt)/COUNT(DISTINCT t.saledate), s.msa_high
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;
准确查询如下,感谢帮助:
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/SUM(subquery.saledate) as AvgRevenue
FROM (SELECT s.store, s.msa_high, SUM(t.amt) as amt, COUNT(DISTINCT t.saledate) as saledate
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
GROUP BY s.store, s.msa_high
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;
您必须使用 GROUP BY
子句中的所有 Non-Aggregated
列。
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/SUM(subquery.saledate) as AvgRevenue
FROM (SELECT s.store, SUM(t.amt)as amt,COUNT(DISTINCT t.saledate) as saledate, s.msa_high
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
GROUP BY s.store, s.msa_high
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;
我在写查询时遇到了一些困惑:
是否需要在子查询中声明所有内容以便在最外层查询中使用?
我正在计算每个高中毕业率 (msa_high) 组的平均收入,但 teradata 不断提示“选定的非聚合值必须是相关组的一部分。”
感谢任何帮助,非常感谢!
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/COUNT(DISTINCT subquery.saledate) as AvgRevenue
FROM (SELECT s.store, SUM(t.amt)/COUNT(DISTINCT t.saledate), s.msa_high
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;
准确查询如下,感谢帮助:
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/SUM(subquery.saledate) as AvgRevenue
FROM (SELECT s.store, s.msa_high, SUM(t.amt) as amt, COUNT(DISTINCT t.saledate) as saledate
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
GROUP BY s.store, s.msa_high
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;
您必须使用 GROUP BY
子句中的所有 Non-Aggregated
列。
SELECT CASE
WHEN subquery.msa_high>=50 AND subquery.msa_high<=60 THEN 'low'
WHEN subquery.msa_high>=60.1 AND subquery.msa_high <=70 THEN 'medium'
WHEN subquery.msa_high>70 THEN 'high'
END AS rate,
SUM(subquery.amt)/SUM(subquery.saledate) as AvgRevenue
FROM (SELECT s.store, SUM(t.amt)as amt,COUNT(DISTINCT t.saledate) as saledate, s.msa_high
FROM trnsact t JOIN store_msa s
ON t.store=s.store
WHERE t.stype='P'
AND (t.saledate NOT BETWEEN DATE '2005-08-01' AND LAST_DAY(DATE '2005-08-27'))
GROUP BY s.store, s.msa_high
HAVING COUNT(DISTINCT t.saledate)>20) as subquery
GROUP BY rate;