0

このクエリを使用する場合:

SELECT map.x,map.y,users.username,Count(username) as count 
FROM map LEFT JOIN users ON (map.x=users.x AND map.y=users.y) 
WHERE map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND 2 
GROUP BY map.x,map.y
ORDER BY map.y DESC,map.x

私はこの結果を得ます:

ここに画像の説明を入力

(元画像: http://i.stack.imgur.com/3AOgH.png )

(ユーザー名は必要ありません。説明のためだけにここにあります)しかし、たとえば「valaki」を数えたくないので、次のような結果を得たいと思います:

http://i.stack.imgur.com/URGFs.png

(元画像: http://i.stack.imgur.com/URGFs.png )

しかし、このコードでは、まったく異なるものになります:

SELECT map.x,map.y,users.username,Count(username) as count 
FROM map LEFT JOIN users ON (map.x=users.x AND map.y=users.y) 
WHERE map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND 2 AND users.username!='valaki'
GROUP BY map.x,map.y
ORDER BY map.y DESC,map.x

これ:

http://i.stack.imgur.com/pO1Iy.png

(元画像: http://i.stack.imgur.com/pO1Iy.png )

(プレイヤーが「valaki」ではない場所ですが、誰もいない場所が必要です。)

誰かが私のクエリを修正できるなら、私はとても幸せです. ありがとうございました!

4

4 に答える 4

0

試す:

SELECT map.x,map.y,users.username,Count(username) as count 
FROM map 
LEFT JOIN users ON (map.x=users.x AND map.y=users.y AND users.username!='valaki') 
WHERE map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND 2
GROUP BY map.x,map.y
ORDER BY map.y DESC,map.x
于 2013-02-08T16:14:00.480 に答える
0

次のようなことを試してみるべきだと思います:

select map.x, map.y, group_concat(users.username),
       sum(case when username <> 'valaki' then 1 else 0 end) as SumNoValaki
from map left join
     users 
     ON map.x=users.x AND map.y=users.y 
WHERE   map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND 2 
GROUP   BY map.x,map.y
ORDER   BY map.y DESC, map.x

クエリは、各行に配置する 1 つのユーザー名を任意に選択しています。全部見たくないですか?

于 2013-02-08T16:05:40.357 に答える
0

これを試してみてください。

SELECT  map.x, map.y, 
        users.username,
        Count(username <> 'valaki') as totalCount 
FROM    map 
        LEFT JOIN users 
            ON map.x=users.x AND map.y=users.y 
WHERE   map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND 2 
GROUP   BY map.x,map.y
ORDER   BY map.y DESC, map.x

Count(username <> 'valaki')でのみ有効であることを忘れないでmysqlください。他の RDBMS で試してみた場合は、次のように実行できます。

COUNT(CASE WHEN username <> 'valaki' THEN 1 ELSE NULL END)
于 2013-02-08T16:02:47.773 に答える
0

次のクエリを試してみてください。「AND users.username IS NOT NULL AND COUNT(username) > 1」を where ステートメントに追加するだけです。

チェックする必要があるデータのクリーンな結果が得られます。

SELECT map.x,map.y,users.username,Count(username) as count 
FROM map LEFT JOIN users ON (map.x=users.x AND map.y=users.y) 
WHERE map.y BETWEEN 0 AND 2 AND map.x BETWEEN 0 AND users.username IS NOT NULL AND COUNT(username) > 1 
GROUP BY map.x,map.y
ORDER BY map.y DESC,map.x
于 2013-02-08T16:07:34.937 に答える