MySQL SELECT多个DISTINCT COUNT

时间:2012-10-16 15:43:14

标签: mysql

这是我正在尝试做的事情。我有一个用户评估表,可能包含重复的行。我希望每个用户只能获得DISTINCT个值。

在下表的示例中。如果只有user_id 1和50属于特定位置,则只应将每个用户的唯一video_id作为COUNT返回。用户1通过视频1,2和1.所以这应该只有2条记录,用户50通过视频2.所以这个位置的总数将是3.我想我需要有两个DISTINCT's查询,但不知道该怎么做。

+-----+----------+----------+
| id  | video_id | user_id  |
+-----+----------+----------+
| 1   |       1  |        1 |
| 2   |       2  |       50 |
| 3   |       1  |      115 |
| 4   |       2  |       25 |
| 5   |       2  |        1 |
| 6   |       6  |       98 |
| 7   |       1  |        1 |
+-----+----------+----------+

这是我当前的查询。

$stmt2 = $dbConn->prepare("SELECT COUNT(DISTINCT user_assessment.id)
FROM user_assessment
LEFT JOIN user ON user_assessment.user_id = user.id
WHERE user.location = '$location'");
$stmt2->execute();
$stmt2->bind_result($video_count);
$stmt2->fetch();
$stmt2->close();

因此,我的查询返回该特定位置的所有计数,但不会忽略每个特定用户的非唯一结果。

希望这是有道理的,谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

SELECT COUNT(DISTINCT ua.video_id, ua.user_id)
FROM user_assessment ua
INNER JOIN user ON ua.user_id = user.id
WHERE user.location = '$location'

你可以在COUNT内写下很多东西,所以不要犹豫,把你想要的东西放在里面。这将给出不同夫妻(video_id, user_id)的数量,如果我理解正确,这就是你想要的。

答案 1 :(得分:1)

下面的查询加入了一个子查询,用于获取每个用户的不同视频。然后,主查询对这些数字进行求和,以获得该位置的视频总数。

SELECT 
  SUM(video_count)
FROM 
  user u
  INNER JOIN 
  ( SELECT
      ua.user_id,
      COUNT(DISTINCT video_id) as video_count
    FROM
      user_assessment ua
    GROUP BY
      ua.user_id) uav on uav.user_id = u.user_id
WHERE 
  u.location = '$location'

请注意,由于您已经使用了绑定,因此您还可以在绑定参数中传递$location。我把它留给你,因为它不是问题的一部分。 ; - )