2

少し有線の問題があります。
クエリ Likes と Collects から 2 つのカウントを選択する必要がありますが、2 番目のクエリを追加すると、代わり2 likes and 10 collects10 likes and 10 collects.
ここで何が間違っていますか?

select  COUNT(tl.ItemLikeId) as a, COUNT(tib.PacketId) as b
from Items i
left join ItemLikes il
on il.ItemId = i.ItemId
left join ItemsInPackets iip
on iip.ItemId = i.ItemId
where i.ItemId = 14591
4

2 に答える 2

6

試してみてくださいSELECT COUNT(DISTINCT tl.ItemLikeId) AS a, COUNT(DISTINCT tib.PacketId) as b

結合により 10 行が得られるため、各テーブルから 10 個の ID が得られます。ただし、すべての ID が一意であるとは限りません。一意の ID を探しています。

于 2012-11-30T19:41:30.873 に答える
2

Count は行数を返します。値を持つ行の数ではなく、個別の行の数でもありません。

値を含む数行の行を取得するには

select  SUM(CASE WHEN tl.ItemLikeId IS NOT NULL THEN 1 ELSE 0 END) as a, 
        SUM(CASE WHEN tib.PacketId IS NOT NULL THEN 1 ELSE 0 END) as b

個別の値の数を取得するには、zimdanenが提案したことを実行して使用しますCOUNT(DISTINCT)

select  COUNT(DISTINCT tl.ItemLikeId) as a, COUNT(DISTINCT tib.PacketId) as b

別のアプローチ、使用ItemLikesItemsInPacketsているのがカウントだけの場合

select
    (
        SELECT COUNT(ItemLikeId) 
        FROM ItemLikes
        WHERE ItemId = i.ItemId
    ) as a,
    (
        SELECT COUNT(PacketId) 
        FROM ItemsInPackets
        WHERE ItemId = i.ItemId
    ) as b
from Items i
where i.ItemId = 14591
于 2012-11-30T19:43:51.987 に答える