SELECT AVG(TURNOVER)
FROM DAILY_STATS
WHERE TYPE=243 AND T_DATE >= TO_DATE(TRUNC(sysdate, 'DAY'),'DD/MM/YYYY')
GROUP BY NAME
你的子查詢返回多個值。
AVG(TURNOVER) >
這裏的>
運算符是標量運算符,只能比較一個值。
可能的解決方案是
AVG(TURNOVER) > all
(SELECT AVG(TURNOVER)
FROM DAILY_STATS
WHERE TYPE=243 AND T_DATE >= TO_DATE(TRUNC(sysdate, 'DAY'),'DD/MM/YYYY')
GROUP BY NAME);
OR
AVG(TURNOVER) > ANY
(SELECT AVG(TURNOVER)
FROM DAILY_STATS
WHERE TYPE=243 AND T_DATE >= TO_DATE(TRUNC(sysdate, 'DAY'),'DD/MM/YYYY')
GROUP BY NAME);
運營商> ANY
和> all
標量運算符將多行操作。請注意,這可能符合或不符合你的邏輯。
編輯:回答太早。現在糾正。
EDIT2:
在語法上,查詢獲取的結果,但是弗蘭克提到你的邏輯似乎有點過
表內容
+------+----------+------+-----------+
| NAME | TURNOVER | TYPE | T_DATE |
+------+----------+------+-----------+
| ABC | 100 | 2 | 03-MAY-16 |
| ABD | 200 | 2 | 02-MAY-16 |
| ABE | 300 | 2 | 01-MAY-16 |
| ABF | 400 | 2 | 30-APR-16 |
| ABF | 500 | 2 | 29-APR-16 |
| ABG | 600 | 2 | 28-APR-16 |
| ABH | 700 | 3 | 27-APR-16 |
| ABH | 800 | 2 | 28-APR-16 |
| ABH | 900 | 2 | 28-APR-16 |
| ABH | 1900 | 2 | 28-APR-16 |
| ABH | 2900 | 2 | 28-APR-16 |
| ABH | 3900 | 2 | 28-APR-16 |
| ABH | 113900 | 2 | 28-APR-16 |
| ABH | 1213900 | 2 | 28-APR-16 |
+------+----------+------+-----------+
查詢
SELECT NAME, AVG(TURNOVER)/52
FROM DAILY_STATS
WHERE TYPE=2 AND T_DATE >= SYSDATE - 365
GROUP BY NAME
HAVING AVG(TURNOVER)/52 > 0
AND
AVG(TURNOVER) > any
(SELECT AVG(TURNOVER)
FROM DAILY_STATS
WHERE TYPE=2 AND T_DATE >= sysdate-7
GROUP BY NAME);
結果
+------+-------------------------------------------+
| NAME | AVG(TURNOVER)/52 |
+------+-------------------------------------------+
| ABG | 11.53846153846153846153846153846153846154 |
| ABD | 3.84615384615384615384615384615384615385 |
| ABE | 5.76923076923076923076923076923076923077 |
| ABF | 8.65384615384615384615384615384615384615 |
| ABH | 3676.373626373626373626373626373626373627 |
+------+-------------------------------------------+
請添加一些示例數據和您的查詢的預期輸出 - 您的要求不是100%清楚(至少不是我)。 –