这是我正在做的。我有一个包含重复行的用户评估表。我只想为每个用户获取DISTINCT
值。MySQL SELECT Multiple DISTINCT COUNT
在下表中的示例中。如果只有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();
所以我的查询返回的所有计数的指定位置的,但它不会忽略从每个特定用户非唯一结果。
希望这是有道理的,谢谢你的帮助。
没有解决方案,但优化:使用INNER JOIN。它比LEFT JOIN更快,并且效果相同,因为您使用WHERE子句中的连接表。 – GolezTrol
您是否知道SQL查询中允许换行符? – GolezTrol
@GolezTrol,是的,谢谢。这就是我如何复制丢失换行符的代码。我编辑了我的帖子,使其更容易阅读。 – Jako