Vinzenz Mai: Produkte mit nur einem Lieferanten

Beitrag lesen

Hallo

ich habe eine MySQL Tabelle, wo die Preise mehrerer Lieferanten reinlaufen. Diese Preise sind jeweils mit unseren Produkten (product_id) konsolidiert. Beispiel:

id | product_id | lieferant | preis
1     205         xxx         12.10
2     2340        yyy         24.60
3     24          zzz         19.00
4     205         zzz         11.90
5     3400        xxx         15.10
6     9999        kkk         18.30
...

Ein Produkt kann es also von mehreren Lieferanten bezogen werden. Wenn ein Produkt bei einem Lieferanten nicht mehr lieferbar ist, fliegt es automatisch aus der Tabelle. Nun geht es mir darum herauszufinden, welche Lieferanten jeweils wie viele Produkte anbieten, die keiner der anderen Lieferanten anbietet.

Du suchst Dir zunächst die Produkte, die genau einen Lieferanten haben:

  
SELECT                    -- Gib mir  
    product_id            -- die ID der Produkte  
FROM                      -- aus  
    tabelle               -- meiner Tabelle  
GROUP BY                  -- aufgeschlüsselt nach  
    product_id            -- den IDs  
HAVING                    -- für die es  
    COUNT(lieferant) = 1  -- genau einen Lieferanten gibt.  

Nun möchtest Du wissen, wieviele solche Produkte jeder Lieferant anbietet:
Dazu gruppierst Du nach Lieferanten, zählst deren Anzahl, wobei Du eben nur die Produkte berücksichtigst, die nur einen Lieferanten haben:

  
SELECT                        -- Gib mir  
    lieferant,                -- die Lieferanten und  
    COUNT(lieferant) anzahl   -- die Anzahl ihres Auftretens  
FROM                          -- in  
    tabelle                   -- der Produkt-Lieferanten-Tabelle  
WHERE                         -- wobei nur die  
    product_id IN (           -- Produkte berücksichtigt  
    SELECT                    -- werden,  
        product_id            --  
    FROM                      --  
        tabelle               --  
    GROUP BY                  --  
        product_id            --  
    HAVING                    -- für die es  
        COUNT(lieferant) = 1  -- genau einen Lieferanten gibt.  
)  
GROUP BY                      -- aufgeschlüsselt  
    lieferant                 -- nach den verschiedenen Lieferanten  

Ein einfaches Subselect (ab MySQL 4.1) sollte es also tun.

Freundliche Grüße

Vinzenz