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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

Q&A

解決済

2回答

676閲覧

SQLで、指定した金額内から複数の商品を抽出することはできるのでしょうか?

zwa

総合スコア7

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

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

0グッド

1クリップ

投稿2020/02/11 16:12

編集2020/02/11 16:14

イメージ説明
例えば900を指定した場合、上記のテーブルの中からpriceの値の合計が900以下となるid:1,6を抽出するようなSQL文を作成したいのですが、そのようなことは可能でしょうか?

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

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

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

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

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

m.ts10806

2020/02/11 22:20

「可能か」と聞かれたら大抵のことは「可能です」と応えることになります。 まずは自身で思ったように組んでみてください。 現在の質問内容だと何も調べず試さず丸投げしていることになります。 今回たまたま回答がついてますが、いつまでも丸投げではアドバイスする人はいなくなります。
guest

回答2

0

特定の金額に近い組合せを求める事は、所謂ナップサック問題です。
以下を参考に。
10. バックトラック問題(ナップサック問題)

動的計画法を用いた方が高速ですので、ストアドなどで対応した方が良いかもしれません。
以下はoracleですけど、アルゴリズムとしては参考になるでしょう。
PL/SQL2 ナップサック問題

投稿2020/02/11 17:57

sazi

総合スコア25206

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

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

zwa

2020/02/12 02:21

ご回答ありがとうございます。 非常に参考になります。
sazi

2020/02/12 02:32 編集

組み合わせが2つだけでないなら、ikatakoさんの回答は要件を満たしていませんが大丈夫ですか?
guest

0

ベストアンサー

こちらでいかがですか?

SQL

1# お弁当のデータを作る 2CREATE TABLE obento 3 (`id` int, `name` text, `price` int, `area` text) 4; 5INSERT INTO obento 6 (`id`, `name`, `price`, `area`) 7VALUES 8 (1, 'お好み', 430, 'a'), 9 (2, '炭火', 500, 'b'), 10 (3, '春の味覚', 498, 'c'), 11 (4, 'まんぷく', 550, 'd'), 12 (5, 'まん福', 550, 'e'), 13 (6, 'しゅうまい', 460, 'f') 14;

SQL

1# 合計が900以下のリストを取得する 2SELECT o1.*, o2.* 3FROM obento o1, obento o2 4WHERE o1.price + o2.price <= 900 5AND o1.name > o2.name;

上記のコードを実行する

投稿2020/02/11 16:24

編集2020/02/11 17:18
ikatako

総合スコア270

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

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

zwa

2020/02/12 02:25 編集

ご回答ありがとうございます。 想定していたものを抽出することが出来ました。 また、今回丸投げのような形になってしまい本当に申し訳ございませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問