Korzystając z następującego zapytania, otrzymuję listę wszystkich stron i liczbę odwiedzających.
SELECT
pages.id AS id,
count(visitors.id) AS volume
FROM pages
LEFT JOIN visitors ON
pages.id = visitors.page_id
GROUP BY pages.id
ORDER BY volume DESC
To z powodzeniem zwraca coś takiego
+--+------+
|id|volume|
+--+------+
|1 |288 |
|2 |355 |
|3 |80 |
etc...
Teraz chcę tylko wybrać strony, na których objętość (liczba wierszy odwiedzających) przekracza 100.
Próbowałem tego:
SELECT
pages.id AS id,
count(visitors.id) AS volume
FROM pages
LEFT JOIN visitors ON
pages.id = visitors.page_id
WHERE
volume > 100
GROUP BY pages.id
ORDER BY volume DESC
Ale to powoduje błąd: # 1054 - Nieznana kolumna „wolumin” w „klauzula gdzie”
Za pomocą GDZIE liczba (odwiedzających.id)> 100 daje ten sam błąd. Jak mogę filtrować te wyniki?
Odpowiedzi:
1 dla odpowiedzi № 1Powinieneś użyć count(visitors.id)
w klauzuli posiadania:
SELECT
pages.id AS id,
count(visitors.id) AS volume
FROM pages
LEFT JOIN visitors ON pages.id = visitors.page_id
GROUP BY pages.id
HAVING count(visitors.id) > 100
ORDER BY volume DESC
1 dla odpowiedzi nr 2
Szukasz klauzuli HAVING:
SELECT
pages.id AS id,
count(visitors.id) AS volume
FROM pages
LEFT JOIN visitors ON
pages.id = visitors.page_id
GROUP BY pages.id
HAVING count(visitors.id) > 200
ORDER BY volume DESC
Możesz pomyśleć o klauzulach HAVING filtrujących wyniki na podstawie zagregowanych wyników GROUP BY.