質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

1053閲覧

sqlの取得について教えてください

asr

総合スコア19

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2016/04/27 05:04

SQLの抽出の仕方で教えてください。

sqlserverでテーブルで

ID 回数
1 1
1 2
1 3
2 1
2 2
3 1
4 1
5 1
5 2

このようなデータがあるとします。

このとき、「回数」が1でかつ、「ID」が重複していないデータを取得するにはどうしたらよいでしょうか。
上記のテーブルだと、

ID 回数
3 1
4 1

のみ取得するSQL文を知りたいです。

ご協力の程、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

SQL

1SELECT ID, COUNT(ID) AS CNT FROM TABLE 2WHERE 回数=1 3GROUP BY ID 4HAVING COUNT(ID) = 1

投稿2016/04/27 05:10

編集2016/04/27 06:28
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2016/04/27 05:20 編集

修正してみました。 動作確認はしてません。
KiyoshiMotoki

2016/04/27 05:38

> 「ID」が重複していないデータを取得する なので、  HAVING COUNT(ID) = 1 ではないですか?
ttyp03

2016/04/27 06:28 編集

失礼しました。 ご指摘の通りです。 ありがとうございます。 回答を修正しました。
asr

2016/04/27 07:12

返答ありがとうございます。 試したところ、 ID 回数 1 1 2 1 3 1 4 1 5 1 という結果が表示されました。 自分の質問の仕方が悪かったかもしれません。 ID 回数 3 1 4 1 この結果を望んでいたのですが、自分でも色々調べてみようと思います。
ttyp03

2016/04/27 07:32

なるほど、IDが重複しているのはしょっぱなから対象外ということですね。 そうするとサブクエリを使った方がいいかもしれませんね。 しかし折角HAVINGを使ったので、なんとか考えてみました。 SELECT ID, SUM(回数) AS TOTAL FROM TABLE GROUP BY ID HAVING SUM(回数) = 1 ちょっと無理やりっぽいので参考程度にしてください。
ttyp03

2016/04/27 07:46

サブクエリを使った例。 結局HAVING使ってますが、こっちの方が厳密に回数を条件にしているので良いかと思います。 SELECT ID, 回数 FROM TABLE WHERE ID IN (SELECT ID FROM TABLE GROUP BY ID HAVING COUNT(ID)=1) AND 回数=1
asr

2016/04/27 08:09

度々ありがとうございます。 上記のSQL文で無事取得することができました。 ありがとうございます。
guest

0

SQL

1select 2 countId.ID, 3 info.TIMES 4from 5 (select id, count(id) as id_count 6 from count_info 7 group by id 8 ) countId, 9 count_info info 10where 11 info.id = countId.id 12 and countId.id_count = 1 13 and info.TIMES = 1

サブクエリで一度IDのカウントを取ってます。
ちょっと回りくどい・・・

投稿2016/04/27 06:06

kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaputaros

2016/04/27 06:11

そうか、HAVING句か。 ・・・まあ、こういうやり方もあります、的な感じで。
asr

2016/04/27 08:10

ありがとうございます。 こちらのやり方でも取得することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問