/ / Jak wybrać rekordy z minimalną liczbą () za pomocą LEWEGO DOŁĄCZU i GROUP BY? - mysql, sql

Jak wybierać rekordy przy minimalnej liczbie () przy użyciu LEWEGO DOŁĄCZU i GROUP BY? - mysql, sql

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 № 1

Powinieneś 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.