Subquery (gewollt ohne JOIN)

AliceDeh

Aktiver Benutzer
Beiträge
31
Grüße Leute,

also jetzt nach 2h überlegen komm ich zu keinem Ergebnis und benötige eure Hilfe.

Die Fragestellung lautet:
What is the name of the salesperson who has sold the most, by total quantity? (Use a
subquery to retrieve this result.)

Also fallen Joins weg :D Alles soll mit Unterabfragen erledigt werden :)

Ich bin soweit gekommen:

USE DBKapitelDB
SELECT TSP.Spname AS Salesperson, SUM(TS.Quantity) AS Menge
FROM db_ddladmin.T_SALESPERSONS AS TSP, db_ddladmin.T_SALES AS TS
WHERE TS.PF_SPNUM = TSP.P_SPNUM
GROUP BY TSP.SPNAME
ORDER BY TSP.SPNAME desc;

Meine 2. Abfrage:
USE DBKapitelDB
SELECT TSP.Spname
FROM db_ddladmin.T_SALESPERSONS AS TSP
WHERE TSP.P_SPNUM =
(SELECT TOP 1 TS.QUANTITY
FROM db_ddladmin.T_SALES AS TS
ORDER BY TS.QUANTITY desc);

Das ist weder mit Unterabfrage - weder korrekt.

Könnt ihr mir helfen? Ich poste mal das ER.. Ich verzweifel Leute..^^

nrizsdv9.jpg
 
Zuletzt bearbeitet:
Werbung:
PS:

USE DBKapitelDB
SELECT TSP.Spname
FROM db_ddladmin.T_SALESPERSONS AS TSP
WHERE TSP.P_SPNUM =
(SELECT TOP 1 TS.PF_SPNUM
FROM db_ddladmin.T_SALES AS TS
ORDER BY TS.QUANTITY desc);

Glaube das ist korrekt, oder? :'D
 
@AliceDeh So ginge es in Oracle. Weiß nicht ob T-SQL das so auch kann... Mal ausprobieren?
Code:
Select spname
From   db_ddladmin.t_salespersons
Where  p_spnum = (Select Max(pf_spnum) keep(dense_rank First Order By qty Desc)
                      From   (Select pf_spnum,
                                     Sum(quantity) qty
                              From   db_ddladmin.t_sales
                              Group  By pf_spnum))
 
Aus dem ER habe ich mir die 3 wichtigen Tabellen und Spalten nachgebaut und komme zu folgendem Vorschlag:
Code:
SELECT
        TP.SPFIRSTNAME + ' ' + TP.SPNAME
    FROM
        T_SALESPERSONS AS TP
    WHERE
        TP.P_SPNUM = (
                      SELECT TOP 1
                            Sales.PF_SPNUM
                        FROM
                            (
                             SELECT
                                    TS.PF_SPNUM
                                   ,SUM(QUANTITY) AS Quantity
                                FROM
                                    T_SALES AS TS
                                GROUP BY
                                    TS.PF_SPNUM
                            ) AS Sales
                        ORDER BY
                            Sales.Quantity DESC
                     )

Die Abfrage mit dem Alias "Sales" gibt die ID und die Summe der Verkäufe aus und wird dann als Tabelle für die nächste Abfrage genutzt. Bei dieser wird nach der Verkaufssumme sortiert und der oberste Eintrag als Refenz für die Abfrage der Personen genommen. Gibt vielleicht eleganter Lösungen, es wird ja auch nicht berücksichtigt wenn 2 Verkäufer gleich viel verkauft haben, aber ich denke das Prinzip der Subselects wird klar.
 
Werbung:
Zurück
Oben