這是我正在做的。我有一個包含重複行的用戶評估表。我只想爲每個用戶獲取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