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

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

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

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Q&A

解決済

3回答

4408閲覧

【SQLite】同一テーブルの複数カラムを演算する

Farman

総合スコア14

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

0グッド

0クリップ

投稿2016/03/03 03:50

お世話になります。
Androidにて、以下のようなテーブルデータから必要なデータを取得するSQL文を書いています。

SQLiteテーブル図

a_type、b_typeカラムには産地のデータが入っており、
a_type、b_type共に入っている値の種類は"都道府県名+産"で
カラムが持つ意味はa_type、b_typeともに同じです。(複数の産地をカラム別に入れている)
a_price、b_priceはa_type、b_typeのそれぞれに対する価格です。

そこで、以下のような条件を満たすSQL文の方法をご教授いただきたいです。

【条件】
1:果物から1つ、野菜から1つを選び、かつ指定した産地のものを選ぶ。
2:産地はa_type、b_typeのいずれかで一致していれば良い。
3:価格の合計が任意の値を超える果物と野菜の組み合わせを抽出する。

例:
群馬産で二つの価格の合計が200以上の果物、野菜の組み合わせ

【期待する結果】
果物=ぶどう、野菜=人参

産地カラムが1つであればそれほど難しくないかとは思うのですが、
産地カラムが2つあるのが少し難解でして・・・。

case when文で

SQLite

1case when a_type = '群馬産' then a_type 2 when b_type = '群馬産' then b_type 3 end as type 4

で、a_typeとb_typeで一致したほうを選ぶようにしたのですが、上手くいかず・・・。

知恵をお貸しください。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

テーブル設計が良くないと思いますが、このままやるなら
1.果物リストと野菜リストをサブクエリで作成して

果物 野菜 いちご 栃木産 050 しいたけ 栃木産 200 いちご 茨城産 100 しいたけ 秋田産 150 ぶどう 茨城産 120 人参 群馬産 150 ぶどう 群馬産 130 人参 埼玉産 100

2.それらを産地で結合

栃木産 いちご 050 しいたけ 200 群馬産 ぶどう 130 人参 150

3.合計額と産地で絞込み


SQLにするとこんな感じでしょうか?

SQL

1SELECT f.name AS 果物, v.name AS 野菜 2FROM ( 3 SELECT name, a_type AS type, a_price AS price 4 FROM テーブル 5 WHERE category = '果物' 6 7 UNION 8 9 SELECT name, b_type AS type, b_price AS price 10 FROM テーブル 11 WHERE category = '果物' 12) AS f INNER JOIN ( 13 SELECT name, a_type AS type, a_price AS price 14 FROM テーブル 15 WHERE category = '野菜' 16 17 UNION 18 19 SELECT name, b_type AS type, b_price AS price 20 FROM テーブル 21 WHERE category = '野菜' 22) AS v ON f.type = v.type 23WHERE (f.price + v.price) >= 200 24AND f.type = '群馬産'

※SQLiteは余り知らないので、動かない節があるかも知れません。

投稿2016/03/03 06:57

hirohiro

総合スコア2068

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

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

Farman

2016/03/04 00:23

こちらのSQLを参考にしたところ、欲しいデータが抽出できました! when case文を使わなくても、UNIONでtype_aとtype_bを結合すれば良いのですね。 テーブル設計についてももう少し勉強したいと思います。 ありがとうございました!
guest

0

試してない&SQLiteは使ったことないので方言的なところがあれだと思いますが、
↓な感じのSQLで行けるかと思います。

SQL

1SELECT * FROM( 2 SELECT name, a_type as type, a_price as price, category, a_price + b_price as sum_price FROM [table] 3 UNION ALL 4 SELECT name, b_type, b_price, category, a_price + b_price FROM [table] 5) 6WHERE name IN ([name1], [name2]) 7AND type = [type] 8AND [price] <= sum_price

複数カラムで定義されているのを合計金額付きで一つに纏め、そこに対して抽出条件を付ける的なSQLです。

投稿2016/03/03 04:42

編集2016/03/03 04:44
lilithchan

総合スコア249

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

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

Farman

2016/03/04 00:25

UNIONを使えば良いのですね!おかげでほしいデータが得られました! ありがとうございました!
guest

0

問題がよくわかないですが、途中までなら

SQLで複数の条件がある場合、無理にWHERE句にするのは、きついと思います。

SELECT 条件1、条件2、条件3、name, a_type, a_price, b_type, b_price, category from teble

として、この結果を 副問い合わせテーブルとして、条件1~3のwhere 句を作る

投稿2016/03/03 04:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Farman

2016/03/04 00:26

無理にWHERE句でやらずにJOINなり、UNIONなりを駆使する必要があったようです。 おかけで欲しいデータが抽出できました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問