Zapytanie zagnieżdżone w 1 tabeli.

Odpowiedz Nowy wątek
2018-12-09 23:57
0

Potrzebuje pomocy z 2 zapytaniami, w 3 zadaniu(3 zadanie, 1 w kolejności na zdjęciu), kompletnie nie wiem jak to zrobić.. hahaha.
A w 1 ZAdanIU, naPiSAłeM zaPYtaniE, ALe niE Wiem jAk doŁĄczyĆ count()
Napisałem przykład na dole.
Wiem że też nie ma sensu napisanie count(), bo to tylko jeden wiersz i nie może się wpisać do wielu wierszy ale...

zad3.pngzad1.png

select Name as Employee, (select Name from tEmployee where ID=ManagerID) as Manager from tEmployee;

select idReporter, IdType, count(idReporter) from zad3 
where idReporter = IdType and (idReporter is not null and IdType is not null) 
order by cnt desc;

Pozostało 580 znaków

2018-12-10 00:41
0

Zadanie 3

SELECT IdReporter, IdType, count(*) cnt
FROM zad3
WHERE IdReporter IS NOT NULL
GROUP BY IdReporter, IdType
ORDER BY cnt DESC

Nie rozumiem co chcesz liczyć w zadaniu 1. Nie wiesz jak dodać tam count bo jest to po prostu alogiczne. Jeżeli chciałbyś policzyć unikalne pary Employee - Manager tak jak w zadaniu 3 to subquery:

SELECT Name, Employee, count(*) cnt
FROM (SELECT Name AS Employee, (SELECT Name FROM tEmployee WHERE ID=ManagerID) AS Manager FROM tEmployee)
GROUP BY Name , Employee
ORDER BY cnt DESC
ten 2 kod nie działa. incorect syntax GROUP - bartek164 2018-12-10 13:40

Pozostało 580 znaków

2018-12-10 13:18
0

ale zadanie 1 jak zrobić?
no takie dostałem.

Pozostało 580 znaków

2018-12-10 13:32
0
bartek164 napisał(a):

ale zadanie 1 jak zrobić?
no takie dostałem.

  1. Wystarczy złączyć tabelę tEMPLOYEE z samą sobą (bo manager też jest pracownikiem)
  2. Nie każdy pracownik ma managera więc złączenie typu LEFT JOIN
Pokaż pozostałe 2 komentarze
aha, bez joinów. - bartek164 2018-12-10 13:33
To pod-zapytanie skalarne, typu: select x,y,(select z from tabelka t1 where t1.id=t2.id) from t2; - yarel 2018-12-10 13:36
no to ja tak zrobiłem, i mam w 1 poście, ale nie działa poprawniel. - bartek164 2018-12-10 13:37
Problemem jest to, że nie aliasujesz tabel i w podzapytaniu warunek ID=ManagerID jest brany z pierwszej tabeli, więc silnik patrzy czy pracownik jest managerm samego siebie, co jest bzdurą. Dodaj aliasy do tabel i do warunku joina. - yarel 2018-12-10 13:39
no a pokażesz jak to zrobić? hihihihi bo nie wiem o co ci chodzi. - bartek164 2018-12-10 13:42

Pozostało 580 znaków

2018-12-10 13:56
0

Można skorzystać ze struktur drzewiastych dla zad 1

select id,  name,  
decode(CONNECT_BY_ROOT name, name, 'NIE MA', CONNECT_BY_ROOT name) manager

from zad1

where level = 2 or managerid is null

connect by prior id =  managerid

order by 1, 2

ale to oczywiście na ORACLE

edytowany 1x, ostatnio: ovadiah, 2018-12-10 13:57

Pozostało 580 znaków

2018-12-10 16:03

@bartek164: Drobna modyfikacja Twojego zapytania (wystarczy dodać aliasy t1 i t2 i później ich użyć w warunku joina).

SELECT t1.Name AS Employee, (SELECT t2.Name FROM tEmployee t2 WHERE t2.ID=t1.ManagerID) AS Manager FROM tEmployee t1;

Z T1 - wyciągasz imię pracownika (t1.NAME) oraz ID managera (t1.ManagerID)
Z T2 - wyciągasz dane managera (po ID uzyskanym z T1)

W niektórych miejsach te aliasy są nadmiarowe, ale dzięki temu powinieneś zobaczyć skąd logicznie te atrybuty są pobierane.

aha, że w taki sposób. ah ten sql, dziękuje za odpowiedż. - bartek164 2018-12-10 19:13

Pozostało 580 znaków

2018-12-10 19:15
0

a jak można dodać do tego warunek, że jeśli jest null to zamień na 'nie ma'

Pozostało 580 znaków

2018-12-10 20:00
0

Coalesce

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0