Oracle Объектно-реляционная БД ORA-00979: не выражение GROUP BY - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь получить имена всех клиентов, у которых есть более 3 проектов, и количество их проектов, но я получаю следующую ошибку:

ORA-00979: not a GROUP BY expression
00979. 00000 -  "not a GROUP BY expression"
*Cause:    
*Action:
Error at Line: 1 Column: 32

Любая идея, как я могу исправить это? Я понимаю, что должен включить все в GROUP BY, но я вроде как сделал.

customer_t и staff_t наследуются от user_t.

SELECT CONCAT(CONCAT(TREAT(REF(u) AS REF customer_t).name.first_name, ' '), (TREAT(REF(u) AS REF customer_t).name.last_name)) AS name, COUNT(p.projectno)
FROM "USER" u JOIN project p ON u.idno = p.customer.idno
WHERE VALUE(u) IS OF TYPE (customer_t)
GROUP BY name
HAVING COUNT(p.projectno) > 3;
CREATE TYPE name_t AS OBJECT (
  first_name     VARCHAR2(32),
  last_name      VARCHAR2(32)
);

CREATE TYPE address_t AS OBJECT (
  province       VARCHAR2(32),
  street         VARCHAR2(32),
  city           VARCHAR2(32),
  postal_code    VARCHAR2(10)
);

CREATE TYPE user_t AS OBJECT (
  idno           NUMBER,
  email          VARCHAR2(40),
  password       VARCHAR2(32),
  name           name_t,
  address        address_t,
  phone          VARCHAR2(15),
  MAP MEMBER FUNCTION get_idno RETURN NUMBER
) NOT FINAL;

CREATE TYPE rank_t AS OBJECT (
  rankno       NUMBER,
  name         VARCHAR2(40),
  description  VARCHAR2(60)
);

CREATE TABLE "RANK" OF rank_t (
  PRIMARY KEY (rankno),
  UNIQUE (name)
);

CREATE TYPE customer_t UNDER user_t (

);

CREATE TYPE staff_t UNDER user_t (
  salary       NUMBER(7,2),
  rank         REF rank_t
);

CREATE TABLE "USER" OF user_t (
  PRIMARY KEY (idno),
  UNIQUE (email));

CREATE TYPE project_t AS OBJECT (
  projectno    NUMBER,
  name         VARCHAR2(40),
  description  VARCHAR2(60),
  customer     REF customer_t,
  service      REF service_t
);

CREATE TABLE project OF project_t (PRIMARY KEY (projectno));

1 Ответ

1 голос
/ 22 февраля 2020
SELECT CONCAT(CONCAT(TREAT(REF(u) AS REF customer_t).name.first_name, ' '), (TREAT(REF(u) AS REF customer_t).name.last_name)) AS name, 
COUNT(p.projectno)
FROM "USER" u JOIN project p ON u.idno = p.customer.idno
WHERE VALUE(u) IS OF TYPE (customer_t)
GROUP BY CONCAT(CONCAT(TREAT(REF(u) AS REF customer_t).name.first_name, ' '), (TREAT(REF(u) AS REF customer_t).name.last_name)) 
HAVING COUNT(p.projectno) > 3;
...