Документация гласит:
Если вы опустите псевдонимы [view], то база данных выведет их из столбцов или псевдонимов столбцов в запросе. По этой причине вы должны использовать псевдонимы, если запрос содержит выражения, а не только имена столбцов.
Таким образом, с вашим определением представления, которое не включает список столбцов / псевдонимов для самого представления, вы должны предоставьте их в запросе, как показывал @Jeff:
CREATE OR REPLACE VIEW totalforday
AS
SELECT ord_date,
COUNT(DISTINCT customer_id) AS count_customers,
AVG(purch_amt) AS avg_purch_amt,
SUM(purch_amt) AS sum_purch_amt
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER
Альтернативой является явное указание имен столбцов для представления:
CREATE OR REPLACE VIEW totalforday
(ord_date, count_customers, avg_purch_amt, sum_purch_amt)
AS
SELECT ord_date,
COUNT(DISTINCT customer_id),
AVG(purch_amt),
SUM(purch_amt)
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER
В запросе все еще могут быть псевдонимы для столбцы и выражения столбцов, что полезно, если вы когда-нибудь захотите запустить это независимо, но они игнорируются представлением - все еще используются явные имена / псевдонимы:
CREATE OR REPLACE VIEW totalforday
(ord_date, count_customers, avg_purch_amt, sum_purch_amt)
AS
SELECT ord_date AS ignored_1,
COUNT(DISTINCT customer_id) AS ignored_2,
AVG(purch_amt) AS ignored_3,
SUM(purch_amt) AS ignored_4
FROM orders
GROUP BY ord_date;
describe totalforday
Name Null? Type
--------------- ----- ------
ORD_DATE DATE
COUNT_CUSTOMERS NUMBER
AVG_PURCH_AMT NUMBER
SUM_PURCH_AMT NUMBER