Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wartość powtórzona największą ilość razy
Forum PHP.pl > Forum > Bazy danych > MySQL
Max Damage
Cześć, potrzeba mi do pewnego zapytania, wartość która jest powtórzona w tabeli powiazania najwięcej razy. To są tabele z wynikami które są mi potrzebne do tego zapytania:

  1. mysql> SELECT * FROM kategorie_ksiazki WHERE id_ksiazki='42';
  2. +------------+--------------+
  3. | id_ksiazki | id_kategorii |
  4. +------------+--------------+
  5. | 42 | 7 |
  6. | 42 | 40 |
  7. | 42 | 56 |
  8. +------------+--------------+

  1. mysql> SELECT p.* FROM kategorie_ksiazki k JOIN powiazania p ON k.id_kategorii=p.child_id WHERE k.id_ksiazki='42';
  2. +-----------+----------+-------+
  3. | parent_id | child_id | depth |
  4. +-----------+----------+-------+
  5. | 7 | 7 | 0 |
  6. | 40 | 40 | 0 |
  7. | 7 | 40 | 1 |
  8. | 56 | 56 | 0 |
  9. | 40 | 56 | 1 |
  10. | 7 | 56 | 2 |
  11. +-----------+----------+-------+


Zapytanie które powinno mi zwrócić wartość 56:
  1. mysql> SELECT child_id FROM (SELECT child_id,COUNT(child_id) AS sm FROM powiazania p JOIN kategorie_ksiazki k ON k.id_kategorii=p.child_id WHERE k.id_ksiazki='42' GROUP BY child_id) AS acb WHERE acb.sm=MAX(sm);

Wywala mi : Invalid use of group function
Coś jest źle z końcowym warunkiem WHERE, ale nie wiem jak to poprawnie napisać.
Mchl
Nie możesz mieć funkcji agregującej w klauzuli WHERE.
Sprawa się ułatwia, jeśli sobie uzmysłowimy, że 'największy' to inaczej 'pierwszy w kolejności na liście posortowanej malejąco'

Kod
SELECT
  child_id,
  COUNT(child_id) AS sm
FROM
  powiazania p
JOIN
  kategorie_ksiazki k
ON k.id_kategorii=p.child_id
  WHERE k.id_ksiazki='42'
GROUP BY child_id
ORDER BY sm DESC
LIMIT 1
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-2024 Invision Power Services, Inc.