2016-11-13 3 views
0

Ich habe 2 Tabellen in Oracle 11g Datenbank, d. H. EARNEDRATING und EMPLOYEE.Verwendung der Ausgabe der inneren Abfrage in SQL

EMP_NUM RTG_CODE  EARNRTG_DATE 
------------------------------------ 
101   CFI   18-Feb-98 
101   CFII  15-Dec-05 
101   INSTR  8-Nov-93 
101   MEL   23-Jun-94 
101   SEL   21-Apr-93 


EMP_NUM EMP_LNAME EMP_FNAME 
----------------------------- 
101  Kolmyoz  George 

Ich möchte die Abfrage schreiben, die emp_num, emp_fname, emp_lname für alle Mitarbeiter und deren Anzahl der verdienten Bewertungen finden.

habe ich versucht, wie diese

select 
    er.emp_num, e.emp_fname, e.emp_lname, 
    count(er.rtg_code) as "Number of Earned Rating" 
from 
    earnedrating er 
join 
    employee e on er.emp_num=e.emp_num 
group by 
    er.emp_num; 

aber

kein GROUP BY-Ausdruck

Antwort

3

Sie haben setzen in Gruppe von allen colums, die nicht in eine Aggregatfunktion: In Ihrem Beispiel können Sie den Vornamen und Nachnamen Gruppe hinzufügen

select er.emp_num, 
     e.emp_fname, 
     e.emp_lname, 
     count(er.rtg_code) "Number of Earned Rating" 
from earnedrating er,employee e 
where er.emp_num = e.emp_num 
group by er.emp_num , e.emp_fname, e.emp_lname; 
2

diesen Fehler Könnten Sie von

 select 
       er.emp_num 
      , e.emp_fname 
      , e.emp_lname 
      , count(er.rtg_code) "Number of Earned Rating" 
     from earnedrating er 
     join employee e on er.emp_num = e.emp_num 
     group by er.emp_num , e.emp_fname, e.emp_lname; 
müssen alle Spalte in der Gruppe sein
2

Wenn Sie das Feld GROUP BY all verwenden, muss das zurückgegebene Feld entweder in der group by-Klausel enthalten sein oder in einer Aggregatfunktion verwendet werden.

select er.emp_num 
    , e.emp_fname 
    , e.emp_lname 
    , count(er.rtg_code) as "Number of Earned Rating" 
from earnedrating er 
    inner join employee e on er.emp_num=e.emp_num 
group by er.emp_num, e.emp_fname, e.emp_lname; 
0
SELECT s.emp_num, 
     e.emp_fname, 
     e.emp_lname, 
     s.rtg_code_count as "Number of Earned Rating" 
FROM (Select er.emp_num, 
      COUNT(er.rtg_code) as rtg_code_count 
     FROM earndrating er group by er.emp_num) as s, 
    employee e 
WHERE s.emp_num=e.emp_num; 
Verwandte Themen