9

「人」のテーブルがあります

コラム

  • ID
  • 名前

および「メモ」を含む表:

コラム

  • ID
  • 文章
  • FK_作成者

people テーブルとその名前と年齢からすべての作成者のメモの数を選択したいのですが、名前ではなく PERSON ID でグループ化したいと考えています。人が同じ名前を持っている状況はたくさんありますが、ID は明らかに常に異なります。

例 (入力)

人:

╔════╦═══════╦═════╗
║ ID ║ NAME  ║ AGE ║
╠════╬═══════╬═════╣
║  1 ║ John  ║  12 ║
║  2 ║ Annie ║  29 ║
║  3 ║ John  ║  44 ║
╚════╩═══════╩═════╝

ノート:

╔════╦═══════╦═══════════╗
║ ID ║ TEXT  ║ FK_AUTHOR ║
╠════╬═══════╬═══════════╣
║  1 ║ 'aaa' ║         1 ║
║  2 ║ 'aaa' ║         1 ║
║  3 ║ 'aaa' ║         2 ║
║  4 ║ 'aaa' ║         2 ║
║  5 ║ 'aaa' ║         3 ║
╚════╩═══════╩═══════════╝

期待される結果:

╔═══════╦═════╦════════════╗
║ NAME  ║ AGE ║ TOTALCOUNT ║
╠═══════╬═════╬════════════╣
║ John  ║  12 ║          2 ║
║ Annie ║  29 ║          2 ║
║ John  ║  44 ║          1 ║
╚═══════╩═════╩════════════╝

データを選択するときに、この列を選択したい場合は名前でグループ化する必要があります。そうしないとエラーが発生するからです。

4

4 に答える 4

3

サブクエリを使用して、このタスクを次のように完了することもできます-

select people.Name,people.Age,(select count(notes.id) 
                                 from notes 
                                where notes.FK_Author= people.id)
from people;
于 2013-04-03T11:26:29.393 に答える
3

また、最初に Notes テーブルからカウントを取得してから、以下のように People テーブルと左結合することもできます。

Fiddle-demo (フィドルを提供してくれた JW に感謝)

select name, age, Notate_Count
from People p left join (
        select fk_author, count(*) Notate_Count
        from Notes 
        group by fk_author ) x
     on p.Id = x.fk_author
order by name --Ordering by name here, change as required

|  NAME | AGE | NOTATE_COUNT |
------------------------------
| Annie |  29 |            2 |
|  John |  44 |            1 |
|  John |  12 |            2 |
于 2013-04-03T11:27:06.193 に答える