phpbar.de logo

Mailinglisten-Archive

Re: SELECT .. GROUP ...
Archiv Mailingliste mysql-de

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SELECT .. GROUP ...



Thomas Heller schrieb am Samstag, den  2. Oktober 1999:
> Ich habe hier ein kleines Problem mit einer Abfrage. Ich will mit
> dieser Abfrage erreichen, daß das Höchstgebot (bei meiner
> InternetAuktion) die passende UserID und die Anzahl der Gebote
> anzeigt die insgesamt vorliegen.
[...]
> Mit der Abfrage: "SELECT UserID, MAX(Bid) AS maxbid, COUNT(Bid) AS
> counter FROM Bids WHERE LotID=1 AND Bid=maxbid GROUP BY LotID ORDER
> BY Bid;", bekomme ich nur einer Fehlermeldung das maxbid ein unknown
> column ist ... stimmt ja auch irgendwie =)
> 
> Ich verzeifel hier langsam. Kann mir jemand sagen wie ich das alles
> in einer Abfrage unterbringen kann?
> Mit 2 Abfragen ist es schon gelöst obwohl mir das nicht so ganz top
> vorkommt.
> 
> "SELECT COUNT(*), MAX(Bid) FROM Bids WHERE LotID=1"
> "SELECT UserID FROM Bids WHERE LotID=1 ORDER BY Bid DESC LIMIT 1"

Das ist genau das Thema des Kapitels "8.3.4 The rows holding the
group-wise maximum of a certain field" im MySQL-Handbuch, welches
zufälligerweise von mir stammt ... ;-)

Inzwischen kenne ich noch eine Alternative zum MAX-CONCAT-Trick mit
Hilfe von LEFT-JOINs:

  SELECT b.UserID, b.Bid AS maxbid, COUNT(*) AS counter
    FROM Bids AS b 
            LEFT JOIN
         Bids AS b2
              ON  b.LotID = b2.LotID
              AND b.Bid < b2.Bid
            LEFT JOIN
         Bids AS b3
              ON  b.LotID = b3.LotID
   WHERE ISNULL(b2.Bid)

Der LEFT-JOIN mit b2 zusammen mit WHERE ISNULL(b2.Bid) filtert erstmal
pro LotID die Zeile mit maximaler Bid heraus, und zum Zählen wird das
dann nochmal mit b3 verbunden (das müßte dann eigentlich kein LEFT
JOIN mehr sein - schadet aber auch nicht - , aber seltsamerweise ist
das im Test mit LEFT JOIN viel schneller als mit einem normalen Join).

Ciao,
  Martin
-- 
Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ >
PGP KeyID=0xE8EF4F75 FiPr=5244 5EF3 B0B1 3826  E4EC 8058 7B31 3AD7

---
*** Abmelden von dieser Mailingliste funktioniert per E-Mail
*** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe


Home | Main Index | Thread Index

php::bar PHP Wiki   -   Listenarchive