我試圖撰寫一個關於的查詢data.stackexchange.com這會給我這個問題的答案是什麼百分比的用戶誰寫了超過1000時間和誰擁有某一類的徽章。單個條件給出與WHERE條件相同的輸出
問題:如果我寫AND ViewCount > 1000
我得到了相同的結果WHERE ViewCount > 1000
我不明白爲什麼會發生
與該查詢:
SELECT
TOP 1000
Class, (Count(Badges.UserId)* 100/(SELECT COUNT(*) From Badges)) AS Percentage
FROM Badges
WHERE Badges.UserId IN (SELECT Posts.OwnerUserId FROM Posts
INNER JOIN
Badges ON Posts.OwnerUserId = Badges.UserId
WHERE ViewCount > 1000)
GROUP BY Class
ORDER BY Class
查詢與AND:
SELECT
TOP 1000
Class, (Count(Badges.UserId)* 100/(SELECT COUNT(*) From Badges)) AS Percentage
FROM Badges
WHERE Badges.UserId IN (SELECT Posts.OwnerUserId FROM Posts
INNER JOIN
Badges ON Posts.OwnerUserId = Badges.UserId
AND ViewCount > 1000)
GROUP BY Class
ORDER BY Class
輸出(由於某種原因,它在b中是相同的OTH例):
1類 - 2%
2類 - 15%
3類 - 45%
您可以加入表定義你的問題? –
我認爲,這是一個顯而易見的,因爲你正在使用INNER JOIN,所以它將在AND,WHERE條件下返回相同的結果,但它在LEFT JOIN中的行爲可能不同,並返回不同的結果集。 – Susang
請您詳細說明您在這裏看到什麼樣的邏輯碰撞? –