创建一个名为nc_num_pos
的视图,其中显示所有nc_jobs
信息以及每行nc_jobs的pos总数。
请记住在GROUP BY
子句中指定SELECT
中的所有列,但这些列不在聚合函数中。
测试:
SELECT *
FROM nc_num_pos;
期待:
job_id cust_id job_date descr jobtype num_pos
---------- ---------- ---------- ---------- ---------- ----------
002 E05 1990-03-03 BUS REPORT N 2
GOT:
***Runtime error***
Program does not use the nc_jobs view or is badly laid out.
使用:
CREATE VIEW nc_num_jobs AS
SELECT b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype, COUNT(po.job_id) as num_pos
FROM Bookjobs b, Publishers p
WHERE b.cust_id = b.cust_id
GROUP BY b.job_id
HAVING p.creditcode = 'C'
AND b.jobtype = 'N';
使用,架构为:
似乎无法得到预期的结果。使用了未知的DBMS。表现得像PostgreSQL而不是mysql。
答案 0 :(得分:0)
你的观点没有意义。我猜你打算:
CREATE VIEW nc_num_jobs AS
SELECT b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype,
COUNT(po.job_id) as num_pos
FROM Bookjobs b JOIN
Publishers p
ON b.cust_id = b.cust_id
WHERE p.creditcode = 'C' AND b.jobtype = 'N'
GROUP BY b.job_id, b.cust_id, b.job_date, b.descr, b.jobtype;
注意:
HAVING
条件不使用聚合函数,因此我假设它们是WHERE
条件。FROM
子句中使用逗号。 始终使用正确,明确,标准的JOIN
语法。GROUP BY
中包含了所有未加聚合的列。如果您正在学习SQL,这是一个很好的做法。