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

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

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

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

Q&A

解決済

3回答

412閲覧

SQL でGroup化した結果を条件にしてSELECTを発行したい

educatio

総合スコア1

SQL

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

0グッド

0クリップ

投稿2023/05/26 02:35

編集2023/05/26 05:50

実現したいこと

①table01を [Point] が "100" を条件に [Name] でグループ化し 最小[ID] も取得
②①の結果の[Name]と[ID]を条件にしてTable01 を該当テーブルを取得したい

前提

table01
+-------+--------+--------+--------+--------+
| Name | ID | Point |Text1 |Text2 |
+-------+--------+--------+--------+--------+
| 太郎 | aaaa | 100 | 2222 | 3333 |
| 太郎 | bbbb | 95 | 5555 | 6666 |
| 花子 | cccc | 50 | 8888 | 9999 |
| 太郎 | dddd | 100 | 1111 | 1212 |
| 花子 | aaaa | 99 | 1414 | 1515 |
| 太郎 | gggg | 100 | 2020 | 2121 |
| 花子 | hhhh | 100 | 2323 | 2424 |
| 五郎 | aaaa | 46 | 2626 | 2727 |
| 三郎 | jjjj | 99 | 2929 | 3030 |
| 五郎 | kkkk | 100 | 3232 | 3333 |
+-------+--------+--------+--------+--------+

期待する結果

+-------+--------+--------+--------+--------+
| Name | ID | Point |Text1 |Text2 |
+-------+--------+--------+--------+--------+
| 太郎 | aaaa | 100 | 2222 | 3333 |
| 花子 | hhhh | 100 | 2323 | 2424 |
| 五郎 | kkkk | 100 | 3232 | 3333 |
+-------+--------+--------+--------+--------+

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

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

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

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

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

yambejp

2023/05/26 03:00 編集

想定するSQL(RDB)の種類とバージョンを明確にしてください 「各NameのTOP1」の意味もよくわかりません、なにがどうトップなのでしょうか?
educatio

2023/05/26 03:02

VBAにてEXCELをADOで呼び出しています。
educatio

2023/05/26 03:04

各Nameから1件のデータを取得したいです。
guest

回答3

0

【SQL Server】ROW_NUMBER で連番・順位をふる

インラインビューで

SQL

1--ROW_NUMBERで連番つきでデータを取得する 2SELECT empno,empname, 3 ROW_NUMBER() OVER(PARTITION BY region ORDER BY region,empno ASC) num 4FROM emp

取得したグループ毎の num = 1 を取得する、を参考に。

投稿2023/05/26 04:05

Orlofsky

総合スコア16415

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

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

0

質問が曖昧なので補足が必要ですが、とりあえず

SQL

1SELECT Name,MIN(Text ) 2FROM table01 3GROUP BY Name

投稿2023/05/26 03:01

yambejp

総合スコア114843

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

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

educatio

2023/05/26 05:53

私の質問が悪く申し訳ありません、質問を追加修正しました。 改めてご教示頂きたく、お願い致します。
guest

0

ベストアンサー

ROW_NUMBERを利用する方法がもっともシンプルだと思います。

SQL

1SELECT Name, ID, Point, Text1, Text2 2FROM ( 3 SELECT *, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY ID) RN 4 FROM table01 5 WHERE Point = 100 6) X 7WHERE RN = 1;

ほかにもEXISTSを利用する方法もあります。

SQL

1SELECT * 2FROM table01 X1 3WHERE Point = 100 4AND NOT EXISTS ( 5 SELECT * 6 FROM table01 X2 7 WHERE X2.Point = 100 8 AND X1.Name = X2.Name 9 AND X1.ID > X2.ID 10)

投稿2023/05/26 06:26

neko_the_shadow

総合スコア2230

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問