0

次のようにデータベース構造を見つけてください...

| id | account_number  | referred_by  |
+----+-----------------+--------------+
|  1 | ac203003        | ac203005     |
+----+-----------------+--------------+
|  2 | ac203004        | ac203005     |
+----+-----------------+--------------+
|  3 | ac203005        | ac203004     |
+----+-----------------+--------------+

次の結果を達成したい...

id, account_number, total_referred 
1,  ac203005, 2
2, ac203003m 0
3, ac203004, 1

そして、私は次のクエリを使用しています...

SELECT id, account_number, 
(SELECT count(*) FROM `member_tbl` WHERE referred_by = account_number) AS total_referred
FROM `member_tbl`
GROUP BY id, account_number

しかし、期待した結果が得られません。助けてください。ありがとう。

4

3 に答える 3

0

これを正しく行うには、テーブル エイリアスを使用する必要があります。

SELECT id, account_number, 
       (SELECT count(*)
        FROM `member_tbl` t2
        WHERE t2.referred_by = t1.account_number
       ) AS total_referred
FROM `member_tbl` t1;

元のクエリには がありましたreferred_by = account_number。エイリアスがないと、これらは同じ行から取得され、値は になります0

また、アウターを外しましたgroup by。重複を削除したい場合を除き、必要ないようです。

于 2013-08-07T01:10:31.380 に答える
0

1 つのアイデアは、テーブル自体を結合することです。これにより、サブクエリを回避できます。このアプローチにより、パフォーマンスが向上する可能性があります。

select b.id, b.account_number, count(a.referred_by) 
from member_tbl a inner join member_tbl b 
on a.referred_by=b.account_number 
group by (a.referred_by);

SQL フィドル: http://sqlfiddle.com/#!2/b1393/2

より多くのデータを含む別のテスト: http://sqlfiddle.com/#!2/8d216/1

于 2013-08-07T01:14:41.943 に答える
0
select t1.account_number, count(t2.referred_by)
from (select account_number from member_tbl) t1
left join member_tbl t2 on
t1.account_number = t2.referred_by
group by t1.account_number;

データのフィドル

より多くのデータをいじる

于 2013-08-07T07:16:58.953 に答える