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

für jede Kategorie ein Minimum

Dieses Thema im Forum "Microsoft Access" wurde erstellt von Maik_2, 20 August 2014.

  1. Maik_2

    Maik_2 Neuer Benutzer

    Hi,

    ich habe ein Problem zu einer DB Abfrage

    Ich habe 3 Tabelle..... TabA (AID, Bezeichnung), TabB (BID, Preis, AID, CID), TabC(CID, Name)

    (in TabB ist die AID,CID der Fremdschlüssel )

    TabA hat 3 Kategorien 1,2 und 3.

    in TabB stehen die Angebote die C macht.

    was ich möchte....

    für jeden Abschnitt den niedrigsten Preis und Name

    klappt auch soweit...nur der Name wird mir nie richtig angezeigt, immer nur der erste Name in der tabelle, also immer NameA ....

    select MIN(Preis), Namen from TabA
    inner Join TabB on TabA.AID=TabB.BID
    inner Join TabC on TabB.BID=TabC.BID
    group by TabB.AID;

    EDIT ----------^

    ich hoffe mein Problem wurde verstanden und mir kann geholfen werden

    Vielen Dank
     
    Zuletzt bearbeitet: 20 August 2014
  2. akretschmer

    akretschmer Datenbank-Guru

    Dein Select ist gemäß der SQL-Norm syntaktisch falsch. In Aggregationen müssen alle Spalten des Resultats entweder aggregiert oder gruppiert werden. Das tust Du nicht. Offenbar ist Access neben MySQL zu doof, das zu sehen und liefert falsche Resultate.
     
  3. Maik_2

    Maik_2 Neuer Benutzer

    wie wäre denn da das select richtig?
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Dein select liefert 2 Spalten: select MIN(Preis), Namen from TabA, also group by Namen.
     
  5. Maik_2

    Maik_2 Neuer Benutzer

    jo das ist richtig...ich habe mich vermutlich undeutlich ausgedrückt was ich genau will.

    ich habe 3 Kategorien 1,2 und 3

    und die in C stehenden Namen machen verschiedene Angebote für die Kategorien:

    Kategorie 1: XYZ Angebot für 1800
    MNO Angebot für 1700

    Kategorie 2: ABC Angebot für 500
    XYZ Angebot für 550

    und für jede Kategorie soll mir der niedrigste Preis MIT Namen angezeigt werden.

    wenn ich group by name mache...werden die kategorien nicht berücksichtigt, wenn ich dazu noch die kategorien gruppiere wird mir alles angezeigt

    Vielen Dank für die Hilfe
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Kann deine Datenbank analytische / Window-Funktionen? Dann kannst Du z.B. mit rank() oder row_number() je Kategorie arbeiten. Kann eigentlich jede halbwegs aktuelle DB - außer MySQL.
     
  7. Maik_2

    Maik_2 Neuer Benutzer

    ich teste das gerade mit der MySQL Workbench....also wird das wahrscheinlich nicht funktionieren so wie du ds schilderst.
     
  8. ukulele

    ukulele Datenbank-Guru

    Ungefähr so:
    Code:
    SELECT    t.kategorie,
            t.preis,
            c2.name AS anbieter
    FROM    (
    SELECT    a1.AID,
            a1.name AS kategorie,
            min(b1.preis) AS preis
    FROM    TabA a1
    LEFT JOIN TabB b1
    ON        a1.AID = b1.AID
    GROUP BY a1.AID,a1.name
    ) t
    LEFT JOIN TabB b2
    ON        t.AID = b2.AID
    LEFT JOIN TabC c2
    ON        b2.CID = c2.CID
    Der Select für t liefert erstmal nur zu jeder Kategorie den niedrigisten Preis und der äußere Select holt alle Anbieter die den niedrigsten Preis haben.
     
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