簡體   English   中英

MySQL:查詢和COUNT BY的子句在哪里?

[英]MySQL: WHERE-clause in query with COUNT and GROUP BY?

對於我的廣告使用的每個類別,我想顯示廣告的總數。

我當前的查詢如下所示:

SELECT
    categories_adverts.category,
    COUNT(adverts.id) AS numberOfAdverts
FROM adverts
LEFT JOIN categories_adverts
ON adverts.id_categories_adverts=categories_adverts.id
GROUP BY category ASC

我在努力包含一個WHERE子句,該子句專門規定僅顯示那些持續時間仍然有效的廣告。 我試圖在“ FROM廣告”和“ LEFT JOIN ...”之間加入以下子句:

WHERE TIME_TO_SEC(timediff(now(),adverts.stamp_created))<=adverts.duration

因此整個查詢都希望這樣,但這不起作用:

SELECT
    categories_adverts.category,
    COUNT(adverts.id) AS numberOfAdverts
FROM adverts
WHERE TIME_TO_SEC(timediff(now(),adverts.stamp_created))<=adverts.duration
LEFT JOIN categories_adverts
ON adverts.id_categories_adverts=categories_adverts.id
GROUP BY category ASC

查詢有什么問題?

where子句在join之后

SELECT c.category,
       COUNT(a.id) AS numberOfAdverts
FROM adverts a
LEFT JOIN categories_adverts c ON a.id_categories_adverts = c.id
WHERE TIME_TO_SEC(timediff(now(),a.stamp_created)) <= a.duration
GROUP BY c.category ASC

您的WHERE子句應在您加入后,分組和排序之前,如下所示:

SELECT
    categories_adverts.category,
    COUNT(adverts.id) AS numberOfAdverts
FROM adverts
LEFT JOIN categories_adverts
ON adverts.id_categories_adverts=categories_adverts.id
WHERE TIME_TO_SEC(timediff(now(),adverts.stamp_created))<=adverts.duration
GROUP BY category ASC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM