【问题标题】:How to create a View - SQL如何创建视图 - SQL
【发布时间】:2018-05-24 08:56:44
【问题描述】:

创建一个名为 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

得到:

***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';

其中,架构是:

View schema image.


似乎无法得到预期的结果。使用了未知的 DBMS。表现得像 PostgreSQL 而不是 mysql。

【问题讨论】:

  • 首先:标记你正在使用的特定sql语言。
  • 使用了未知的 DBMS。表现得像 PostgreSQL 而不是 mysql。
  • 2.请尝试更具体。 “我似乎做错了。”对我们没有任何意义。 3. 这里可以问你的作业问题,但应该是针对具体问题的重点问题,我们不会为你写代码,也不会为你做作业。 4. 您忽略了赋值部分“记住在 GROUP BY 子句中指定 SELECT 中但不在聚合函数中的所有列”。这就是您无法创建视图的原因。
  • 一次迈出一步。从 JOIN 开始。添加在哪里。添加分组依据。当结果正常时,创建视图。
  • 您到底怎么不知道您使用的是哪个数据库?这是一种可怕的生活方式:(

标签: sql create-view


【解决方案1】:

你的观点没有意义。我猜你打算:

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,这是一个很好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多