SQL-Problem: Preiskategorien abfragen
am 10.12.2006 20:30:22 von francwalter
Hallo,
Ich habe eine Tabelle (tab) mit verschiedenen Preiskategorien, nämlich
verschiedene Preise,
abhängig von der Anzahl (nicht regelmässig), z.B.
1, 1, 1, 1.0 (Erklärung: 'ID' =3D 1, 'Preiskategorie' =3D 1, 'Anzahl'
=3D 1, 'Preis' =3D 1.0)
2, 1, 100, 0.9 (Erklärung: 'ID' =3D 2, 'Preiskategorie' =3D 1, 'Anzahl'
=3D 100, 'Preis' =3D 0.9)
3, 1, 1000, 0.8 (Erklärung: 'ID' =3D 3, 'Preiskategorie' =3D 1, 'Anzahl' =
=3D
1000, 'Preis' =3D 0.8)
4, 2, 1, 50.0 (Erklärung: 'ID' =3D 4, 'Preiskategorie' =3D 2, 'Anzahl' =
=3D
1, 'Preis' =3D 50.0)
5, 2, 1000, 49.0 (usw.)
6, 3, 1, 3.5
7, 3, 500, 3.4
usw.
Gibt es hier eine elegantere Lösung, um "zwischen"
zwei werte zu kommen (also z.B. Suche den Preis der Preiskategorie 1,
bei Anzahl =3D 37 in diesem Fall käme 1.0 raus, da unter 100)
ausser mit ORDER BY DESC und LIMIT
(also "SELECT Preis FROM tab WHERE Preiskategorie =3D 1 AND Anzahl < 37
ORDER BY Preis DESC LIMIT 1")
Oder ist da die Tabelle schon ungeschickt angelegt?
Danke für Tips,
Gruss franc
Re: SQL-Problem: Preiskategorien abfragen
am 10.12.2006 22:47:51 von Helmut Chang
francwalter@gmx.de schrieb:
> Hallo,
> Ich habe eine Tabelle (tab) mit verschiedenen Preiskategorien, nämlich
> verschiedene Preise,
> abhängig von der Anzahl (nicht regelmässig),...
Also Staffelpreise.
> Gibt es hier eine elegantere Lösung, um "zwischen"
> zwei werte zu kommen (also z.B. Suche den Preis der Preiskategorie 1,
> bei Anzahl = 37 in diesem Fall käme 1.0 raus, da unter 100)
> ausser mit ORDER BY DESC und LIMIT
> (also "SELECT Preis FROM tab WHERE Preiskategorie = 1 AND Anzahl < 37
> ORDER BY Preis DESC LIMIT 1")
^^^^
Hmm... Willst du nicht den kleinsten Preis haben, der bei den
Datensätzen, die die 'WHERE Anzahl'-Bedingung erfüllen, zurückgegeben
wird? Bzw. wirklich korrekt wäre wohl 'ORDER BY Anzahl DESC'.
Ansonsten, wenn sicher gestellt ist: höhere Staffel-Anzahl = niedrigerer
Preis ginge auch:
SELECT MIN(Preis)
FROM tab
WHERE Preiskatgeorie = 1
AND Anzahl < 37
(GROUP BY Preiskategorie)
gruss, heli
Re: SQL-Problem: Preiskategorien abfragen
am 10.12.2006 23:39:49 von francwalter
Danke, Heli.
Ja Du hast natürlich recht, ich muss nach Anzahl sortieren
(rückwärts), weil die ja die eigentliche Staffel ausmacht.
Gibts denn für solche Staffelpreis-Tabellen geschicktere Ansätze,
oder ist eine solche Tabelle üblich?
Gruss franc
Re: SQL-Problem: Preiskategorien abfragen
am 11.12.2006 18:53:07 von Helmut Chang
francwalter@gmx.de schrieb:
> Ja Du hast natürlich recht, ich muss nach Anzahl sortieren
> (rückwärts), weil die ja die eigentliche Staffel ausmacht.
Dann sollte es doch so passen. Andere Möglichkeit:
In Prosa:
Hole den Datensatz mit der größten Staffelmenge, die kleiner als die
tatsächliche Anzahl ist, aus der gesuchten Kategorie.
In SQL (mit hinreichend neuem SQL und ungetestet):
SELECT Preis
FROM Tabelle
WHERE Preiskategorie = x
AND Anzahl = (
SELECT MAX(Anzahl)
FROM Tabelle
WHERE Preiskategotegorie = x
AND Anzahl < y
)
Siehe auch
Ob das effizienter ist, weiß ich allerdings nicht.
> Gibts denn für solche Staffelpreis-Tabellen geschicktere Ansätze,...
Mir fällt grad nix dazu ein. Tät ich genauso machen.
gruss, heli
Re: SQL-Problem: Preiskategorien abfragen
am 11.12.2006 20:48:59 von francwalter
> SELECT Preis
> FROM Tabelle
> WHERE Preiskategorie = x
> AND Anzahl = (
> SELECT MAX(Anzahl)
> FROM Tabelle
> WHERE Preiskategotegorie = x
> AND Anzahl < y
> )
Doppel-Super-Heli,
Danke,
franc