Как создать View - SQL - PullRequest
0 голосов
/ 24 мая 2018

Создайте представление с именем nc_num_pos, которое отображает всю информацию nc_jobs вместе с общим количеством pos для каждой строки nc_jobs.

Не забудьте указать все столбцы в предложении 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';

При схеме:

Просмотр изображения схемы .


Невозможно отобразитьчтобы получить то, что ожидается.Используется неизвестная СУБД.Ведет себя как PostgreSQL, а не mysql.

1 Ответ

0 голосов
/ 24 мая 2018

Ваш взгляд не имеет смысла.Я предполагаю, что вы намереваетесь:

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.
...