Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybieranie wierszy, ktorych jedno z pol ...
Forum PHP.pl > Forum > Bazy danych > MySQL
Draugfor
Hej!
Wiem, temat nic nie mowi, wiec przejde od razu do rzeczy.

Mam tabele albums:

Kod
mysql> select * from albums;
+----+--------------------+---------------+
| ID | title              | band          |
+----+--------------------+---------------+
|  1 | Load               | Metallica     |
|  2 | Master of Puppets  | Metallica     |
|  3 | Made In Heaven     | Queen         |
|  4 | Melissa            | Mercyful Fate |
|  5 | Chamber Music      | Coal Chamber  |
|  6 | A Day At The Races | Queen         |
+----+--------------------+---------------+


I chce, zeby zapytanie zwrocilo te albumy i nazwe tego zespolu (zespolow), ktory ma tych albumow najwiecej, czyli tutaj Queen i Metallica.

Innymi slowy oczekuje wyniku:
Kod
Load               | Metallica     |
Master of Puppets  | Metallica     |
Made In Heaven     | Queen         |
A Day At The Races | Queen         |


Wykombinowalem tylko takie zapytanie:
  1. mysql> SELECT band, count(*) AS ilosc
  2. FROM albums GROUP BY band HAVING ilosc=(SELECT count(*) AS i1
  3. FROM albums GROUP BY band ORDER BY i1 DESC LIMIT 1 ) ORDER BY ilosc DESC;

ktore zwraca:
Kod
+-----------+-------+
| band      | ilosc |
+-----------+-------+
| Metallica |     2 |
| Queen     |     2 |
+-----------+-------+


Czy ktos wie, jak to zrobic? smile.gif
Pozdrawiam!
mario
To już było poruszane Jak sprawdzić największą wartość?
  1. SELECT MAX(nazwaKolumny)
  2. FROM nazwaTabeli;

zanim napiszesz posta użyj wyszukiwarki
Draugfor
Madrala - a Ty przeczytaj pytanie zanim napiszesz odpowiedz.
Co mam niby z tym maxem zrobic? Heh.



EDIT

No dobra, sam cos wymyslilem. Wyglada obrzydliwie; znajdzie sie smialek, ktory to zoptymalizuje?

  1. SELECT band, title
  2. FROM albums WHERE concat(band,(SELECT count(*) AS c1
  3. FROM albums GROUP BY band ORDER BY c1 DESC LIMIT 1 ))=any(SELECT concat(band, count(*)) AS ilosc
  4. FROM albums GROUP BY band HAVING count(*)=(SELECT count(*) AS c2
  5. FROM albums GROUP BY band ORDER BY c2 DESC LIMIT 1 ));
behemot
Witam,

Ja wykombinowalem cos takiego :)
Ale to prawie to samo co Ty
  1. SELECT title,band
  2. FROM albums WHERE band IN (SELECT band
  3. FROM albums GROUP BY band HAVING count(*) >= (SELECT count(*) AS ilosc
  4. FROM albums GROUP BY band ORDER BY ilosc DESC LIMIT 1 )-1);

Testowalem na postgresie ale w mysql tez chyba powinno dzialac :)

Pozdrawiam,
kuba
Draugfor
No nie pogadasz! cool.gif
Wlasnie o to chodzilo! Tylko to -1 w ostatniej linijce jest niepotrzebne, a tak to gra i buczy, wielkie dzieki!
Kamien z serca. biggrin.gif

Pozdrawiam Behemot!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.