2015-09-14 2 views
1

Попытка получить число художников с более чем 1 копией, я пытаюсь использовать следующий SQL, возвращающий ошибку.ORACLE SQL Count or having count

ORA-00937: не функциональная группы одногруппового 00937. 00000 - "не одногрупповой группы функция" * Причина: * Действие: Ошибка в строке: 22 Колонок: 8

SELECT W.WORKID,A.LASTNAME,A.FISRTNAME, COUNT(W.ARTISTID) AS Orders 
FROM (WORK W INNER JOIN ARTIST A 
ON W.ARTISTID=A.ARTISTID) 
GROUP BY A.LASTNAME, W.WORKID, A.FISRTNAME 
HAVING COUNT (W.ARTISTID) > 1; 

SELECT WORKID,LASTNAME,FIRSTNAME 
FROM WORK W, ARTIST A 
WHERE W.ARTISTID = A.ARTISTID 
HAVING COUNT (W.ARTISTID) > 1; 
+3

, что это ошибка, которую вы получаете? Должно ли 'fisrtname' быть' firstname'? –

+0

, пожалуйста, добавьте свой вывод ошибки. –

+0

ORA-00937: не функциональная группы одногруппового 00937. 00000 - "не функциональная группы одногрупповой" * Причина: * Действие: Ошибка в строке: 22 Колонка: 8 – CJM

ответ

0
SELECT A.LASTNAME,A.FIRSTNAME, COUNT(W.ARTISTID) AS Orders 
FROM (WORK W INNER JOIN ARTIST A 
ON W.ARTISTID=A.ARTISTID) 
GROUP BY A.LASTNAME, A.FIRSTNAME 
HAVING COUNT (W.ARTISTID) > 1; 
0

Я не упоминая ограничения в ниже example--

CREATE TABLE WORK1 (ARTISTID NUMBER(10),WORKID NUMBER(10)); 

create table ARTIST (ARTISTID number(10),lastname varchar2(10),firstname varchar2 (10)); 

INSERT INTO ARTIST VALUES (1,'a','aa'); 
insert into ARTIST values (2,'b','bb'); 
insert into ARTIST values (3,'c','cc'); 
commit; 


INSERT INTO WORK1 VALUES (1,1); 
INSERT INTO WORK1 VALUES (1,2); 
INSERT INTO WORK1 VALUES (2,3); 
INSERT INTO WORK1 VALUES (2,4); 
INSERT INTO WORK1 VALUES (3,5); 
commit; 

А потом, Left outer join поможет вам получить желаемое output-

SELECT COUNT(C.artist) as Orders, 
    C.LASTNAME, 
    C.FIRSTNAME 
FROM 
    (SELECT A.ARTISTID AS artist , 
    B.WORKID   AS workid, 
    A.LASTNAME  AS lastname, 
    A.FIRSTNAME  AS firstname 
    FROM ARTIST A 
    LEFT OUTER JOIN WORK1 B 
    ON A.ARTISTID=B.ARTISTID 
)C 
GROUP BY C.LASTNAME, 
    C.FIRSTNAME 
HAVING COUNT(C.artist)>1; 

Output--

ORDERS LASTNAME FIRSTNAME 
------ ---------- ---------- 
    2 b   bb   
    2 a   aa