GROUP BY und dann kleinsten Wert

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • GROUP BY und dann kleinsten Wert

    Hiho,

    folgende Tabelle

    CREATE TABLE `merchandise_shipping` (
    `id` int(5) NOT NULL auto_increment,
    `country` varchar(250) collate latin1_german1_ci NOT NULL,
    `cost` float(6,2) NOT NULL,
    `weight` int(5) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `weight` (`weight`,`country`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=9 ;

    --
    -- Daten für Tabelle `MERCHANDISE_SHIPPING`
    --

    INSERT INTO `MERCHANDISE_SHIPPING` (`id`, `country`, `cost`, `weight`) VALUES (1, 'Deutschland', 4.30, 1000),
    (2, 'Deutschland', 7.00, 5000),
    (3, 'Deutschland', 10.50, 10000),
    (5, 'Österreich', 12.00, 5000),
    (4, 'Österreich', 6.70, 2000),
    (6, 'Schweiz', 5.30, 3000),
    (7, 'Schweiz', 3.42, 4000),
    (8, 'Schweiz', 14.12, 10000);
    Wenn ich jetzt eine Bestellung mit einem Gewicht von z.B. 1300g habe, dann soll er mir 2, 4 und 6 ausgeben.

    Mit dem Befehl
    SELECT MERCHANDISE_SHIPPING.id, MIN(MERCHANDISE_SHIPPING.country, weight), MERCHANDISE_SHIPPING.cost FROM MERCHANDISE_SHIPPING WHERE MERCHANDISE_SHIPPING.weight >= 1352 GROUP BY country
    geht das leider nicht, weil dann die Preise nicht mehr mit dem Gewicht übereinstimmen...weiß der geier wieso.

    Hoffe ihr könnt mir helfen.

    Danke


    MfG
    Spoony

  • #2
    vielleicht so?
    Code:
    select * from merchandise_shipping ms1
      where id in (select id from merchandise_shipping ms2
    		where weight = (select min(weight) from merchandise_shipping ms3
    				  where ms3.country=ms2.country and weight>1300) group by country)
      order by id;
    was machen die vielen Gedanken in meinem Kopf ?

    Kommentar


    • #3
      hmm danke scheint zu klappen.

      allerdings hab ich mir ne einfacherere variante als 3 verschachtelte select befehls vorgestellt ^^ aber nuja, solang die tut.

      Kommentar

      Lädt...
      X