PythonQ 240-8XX Manual de usuario Pagina 182

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 768
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 181
Kapitel 4: Einf¨uhrung in MySQL: Ein MySQL-Tutorial 161
SELECT artikel, haendler, preis
FROM shop s1
WHERE preis=(SELECT MAX(s2.preis)
FROM shop s2
WHERE s1.artikel = s2.artikel);
In MySQL macht man das am besten in mehreren Schritten:
1. Die Liste (artikel,maxpreis) holen.
2. F¨ur jeden Artikel die korrespondierenden Zeilen holen, die den ochsten Preis gespe-
ichert haben.
Das kann auf einfache Weise mit einer tempor¨aren Tabelle geschehen:
CREATE TEMPORARY TABLE tmp (
artikel INT(4) UNSIGNED ZEROFILL DEFAULT ’0000’ NOT NULL,
preis DOUBLE(16,2) DEFAULT ’0.00’ NOT NULL);
LOCK TABLES shop read;
INSERT INTO tmp SELECT artikel, MAX(preis) FROM shop GROUP BY artikel;
SELECT shop.artikel, haendler, shop.preis FROM shop, tmp
WHERE shop.artikel=tmp.artikel AND shop.preis=tmp.preis;
UNLOCK TABLES;
DROP TABLE tmp;
Wenn Sie keine TEMPORARY-Tabelle benutzen, m¨ussen Sie zus¨atzlich die ’tmp’-Tab elle sper-
ren.
“Kann das mit einer einzigen Anfrage durchgef¨uhrt werden?”
Ja, aber nur unter Verwendung eines recht ineffizienten Tricks, den wir den
“MAX-CONCAT-Trick” nennen:
SELECT artikel,
SUBSTRING( MAX( CONCAT(LPAD(preis,6,’0’),haendler) ), 7) AS haendler,
0.00+LEFT( MAX( CONCAT(LPAD(preis,6,’0’),haendler) ), 6) AS preis
FROM shop
GROUP BY artikel;
+---------+---------+-------+
| artikel | haendler| preis |
+---------+---------+-------+
| 0001 | B | 3.99 |
| 0002 | A | 10.99 |
| 0003 | C | 1.69 |
| 0004 | D | 19.95 |
+---------+---------+-------+
Das letzte Beispiel kann etwas effizienter gemacht werden, wenn man das Aufteilen der
verketteten Spalte im Client durchf¨uhrt.
Vista de pagina 181
1 2 ... 177 178 179 180 181 182 183 184 185 186 187 ... 767 768

Comentarios a estos manuales

Sin comentarios