3

私はそのようなテーブル(myTable)を持っています:

id  | name  | orig_id
----+-------+--------
01  | Bill  | -
02  | Tom   | 01
03  | Sam   | 01
04  | Alex  | 02
05  | Phil  | -
06  | Bob   | 01

各レコードを返すクエリが必要ですが、現在の行の ID と等しい orig_id を持つ他の行の数を含む列が追加されています。

結果のテーブルは次のようになります。

id  | name  | orig_id | mycount
----+-------+---------+--------
01  | Bill  | -       | 3
02  | Tom   | 01      | 1
03  | Sam   | 01      | 0
04  | Alex  | 02      | 0
05  | Phil  | -       | 0
06  | Bob   | 01      | 0

次のクエリを試しましたが、結果が得られません。

SELECT *, COUNT(t.name) AS mycount
FROM "myTable" AS t
WHERE t.id=t.orig_id
GROUP BY t.id;

どうすれば望ましい結果を達成できますか?

4

2 に答える 2

0

シンプルなleft joinwith count はそれを行います:

select t.id, t.name, t.orig_id, count(o.id) mycount 
from myTable t
left join myTable o on t.id = o.orig_id
group by t.id, t.name, t.orig_id

この結果を生成するSQLFiddleのライブ デモを参照してください。

ID  NAME    ORIG_ID MYCOUNTÂ 
01  Bill    (null)  3
02  Tom     01      1
03  Sam     01      0
04  Alex    02      0
05  Phil    (null)  0
06  Bob     01      0
于 2013-06-26T01:56:54.550 に答える