【问题标题】:MySQL: WHERE-clause in query with COUNT and GROUP BY?MySQL:带有 COUNT 和 GROUP BY 的查询中的 WHERE 子句?
【发布时间】:2015-01-17 11:00:49
【问题描述】:

对于用于我的广告的每个类别,我想显示广告的总数。

我当前的查询如下所示:

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 adverts”和“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

查询有什么问题?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你的 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
    

    【讨论】:

      【解决方案2】:

      where 子句位于joins 之后

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多