我可以使用条件where语句从mysql中获取两个计数吗?

时间:2012-08-01 12:14:21

标签: mysql sql

我目前正在根据时间戳获取用户访问次数,但我还想包括总访问次数。这可能与一个MySQL语句有关。这是我当前的查询,它只根据时间戳返回一个计数:

$sql = "SELECT count(*) as visitors_count FROM profile_visits
        LEFT JOIN users on users.user_id=profile_visits.user_id
        LEFT JOIN profile_info ON profile_info.user_id = users.user_id
        WHERE profile_user_id=5
        AND users.restricted <> 1
        AND profile_visits.visit_time > '2012-07-30 18:53:16'";

我还可以返回排除时间戳的访问总数吗?

1 个答案:

答案 0 :(得分:2)

您可以使用CASE表达式在COUNT()内有条件地汇总:

SELECT    COUNT(*) AS total_count,
          COUNT(CASE WHEN profile_visits.visit_time > '2012-07-30 18:53:16' THEN 1 END) AS visitors_count
FROM      profile_visits
LEFT JOIN users ON users.user_id=profile_visits.user_id
LEFT JOIN profile_info ON profile_info.user_id = users.user_id
WHERE     profile_user_id=5 AND 
          users.restricted <> 1

我只是将> '2012-07-30 18:53:16'WHERE子句移动到CASE中的COUNT()表达式,只有符合该条件的行才会计算该行。当然,COUNT(*)将计算所有行,而不考虑时间戳。