MySQL SELECT多个DISTINCT COUNT

Jak*_*ako 2 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 |
+-----+----------+----------+
Run Code Online (Sandbox Code Playgroud)

这是我当前的查询.

$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();
Run Code Online (Sandbox Code Playgroud)

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

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

New*_*o.O 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'
Run Code Online (Sandbox Code Playgroud)

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

  • +1我不确定并且没有手头的数据库来测试,但如果这样做,那就比我的回答更好.更紧凑,更清晰,可能更快. (2认同)