0

私は達成しようとしている相談imに問題があります:

SELECT [columns] FROM table1 LEFT/RIGHT JOIN table2 ON table1.id_user = table2.id  [WHERE clause] GROUP BY column

このコンサルトに実行してほしいことの例を以下に示します。

このレコードをtable1に含める:

id | id_user | ユーザー| 価値

1 | 1 | name1 | 10

2 | 1 | name1 | 10

3 | 1 | name1 | 11

4 | 1 | name1 | 10

5 | 2 | name2 | 11

6 | 2 | name2 | 11

そしてこれは表2にあります。

id | ユーザー

1 | name1

2 | name2

値を指定したすべてのユーザーのレコードがいくつ存在するかを取得したいと思います。たとえば、値10を検索する場合は、次のように取得します。

name1 | 3

name2 | 0

LEFTとRIGHTJOINを試しましたが、機能しませんでした。WHERE句に一致する唯一のレコードであるため、これを取得しました。

name1 | 3

そして、name2の結果ではありません。

私はここで私の問題を取り上げる前に解決策を探すことに失敗しました、誰かがこの問題で私を助けてくれることを願っています:)

悪い英語でごめんなさい。私はあなたが提供できるどんな助けにも本当に感謝します

4

2 に答える 2

0

最も効率的なクエリではありませんが、これは機能するはずです

select user, (select count(*) from table1 b where b.id_user=a.id and b.value=10)
from table2 a

多くの場合、このクエリは非常に非効率的であるため、SQLで実行しようとするのではなく、クライアントで結果を結合します。プロセスは次のようになります。

  1. 表2から*を選択
  2. table1からid_user、count(*)を選択します。ここでvalue = 10
  3. クエリ#1を繰り返し、結果を次のようなオブジェクトに保存します。{'user': name, 'count': 0}
  4. クエリ#2を繰り返し、ステップ#3のオブジェクトを更新します。

これは常に結果セットのサイズと関連するハードウェアに依存しますが、コードの記述はかなり複雑ですが、多くの場合、これはより高速です。

于 2013-02-25T23:37:38.367 に答える
0

これを試して。

SELECT t2.user,SUM(CASE WHEN t2.id=t1.id_user THEN 1 ELSE 0 END) AS TotalRecords 
FROM table2 t2
LEFT JOIN table1 t1 ON t2.id =t1.id_user
GROUP BY t2.id 
HAVING t1.value=10
于 2013-02-25T23:42:53.380 に答える