Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Subquery (gewollt ohne JOIN)

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von AliceDeh, 29 Januar 2015.

  1. AliceDeh

    AliceDeh Aktiver Benutzer

    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: 29 Januar 2015
  2. AliceDeh

    AliceDeh Aktiver Benutzer

    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
     
  3. Distrilec

    Distrilec Datenbank-Guru

    @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))
     
  4. Ritschi

    Ritschi Aktiver Benutzer

    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.
     
    Distrilec gefällt das.
  5. AliceDeh

    AliceDeh Aktiver Benutzer

    Danke auch dir für deine Antwort.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden