-1

data.stackexchange.comでクエリを作成しようとしました。これにより、1000 回以上表示された投稿を書き、特定のクラスのバッジを所有しているユーザーの割合がどのくらいかという質問に対する答えが得られます。

問題: なぜそれが起こるのか理解できないので、私が書くAND ViewCount > 1000と同じ結果が得られますWHERE ViewCount > 1000

WHERE を使用したクエリ:

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

出力 (何らかの理由でどちらの場合も同じです):

1クラス - 2パーセント

2クラス - 15%

3 クラス - 45%

4

2 に答える 2

1

の条件でを使用しANDて 2 つの式を接続しています。内部クエリに注目してください。ONJOIN

SELECT Posts.OwnerUserId FROM Posts 
INNER JOIN Badges ON Posts.OwnerUserId = Badges.UserId 
WHERE ViewCount > 1000

対:

SELECT Posts.OwnerUserId FROM Posts 
INNER JOIN Badges
ON (
    Posts.OwnerUserId = Badges.UserId 
    AND ViewCount > 1000
)

これら 2 つのクエリは、論理的に同等です。

于 2016-12-10T11:12:44.787 に答える