SELECT文で取得するカラム名を指定する箇所でサブクエリを使って、countriesテーブル内のすべての国について,対応するcountries.idをusers.country_idに持つユーザー数を取得したいです。
usersテーブル
| id | name | country_id |
|---|---|---|
| 1 | brian | 2 |
| 2 | emma | 2 |
| 3 | aubrey | 2 |
| 4 | mitsuru | 1 |
| 5 | brandon | 2 |
| 6 | shunji | 1 |
countriesテーブル
| id | name |
|---|---|
| 1 | Japan |
| 2 | USA |
| 3 | China |
| 4 | India |
以下のSQLを作成して実行したのですが、「Japan,2 USA,4 China 0」という結果になり、Indiaのデータが取得できません。
SQL
1select name, 2( 3 select count(*) 4 from users 5 where country_id = c.id 6) as user_count 7from countries as c;
「Japan,2 USA,4 China 0 India 0」という結果を得るためには、上記のSQLをどのように修正すればよろしいでしょうか?
よろしくお願いいたします。
質問のテーブル定義はCREATE TABLEに、テーブル中のデータはINSERTに https://teratail.com/help/question-tips#questionTips3-7 の [コード]
で見易さを考えて修正できた方が適切なコメントが付き易いです。
SELECTも上記のMarkdownに含めてね。
同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。SQLの観点から Oracle Database, PostgreSQL, MySQL の特徴を整理しよう! https://www.ashisuto.co.jp/corporate/column/technical-column/detail/1197236_2274.html
SQLでSELECTを実行する為にはCREATE TABLEが実行されてテーブルが存在していなければなりません。SELECTを実行した時にテーブル内に存在するデータを取得される為には、既にデータがINSERTされていなければなりません。(これを理解できなかったら職業を変えた方が人生失敗が少ないです)
CREATE TABLEやINSERTとは Markdown の表で提示しろ、って意味ではありません。
https://www.dbonline.jp/sqlite/table/index1.html
https://www.dbonline.jp/sqlite/insert/index1.html