Q&A
解決済
3回答
3900閲覧
総合スコア109
MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。
SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。
SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。
0グッド
1クリップ
投稿2017/10/17 05:36
0
1
SELECT SUM(price) FROM menu WHERE menu_id = abc OR menu_id = abc OR menu_id = def このようなSQL文を叩くと、abc+defのみの結果となってしまい、abcが1つ飛ばされてしまいます。
SELECT SUM(price) FROM menu WHERE menu_id = abc OR menu_id = abc OR menu_id = def
abc+def
abc
abc+abc+defのSUMを取得するにはどうしたらいいのでしょうか?
abc+abc+def
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
質問へのコメント
回答3件
ベストアンサー
WHEREはあくまでテーブルから必要なものを絞り込むためのものなので、条件の書き方で同じレコードが2回取られることはありません。
WHERE
いちばんシンプルにやるとすれば、WHERE menu_id = abcとWHERE menu_id = defを別に取って、それから計算することになると思います。
WHERE menu_id = abc
WHERE menu_id = def
投稿2017/10/17 05:46
総合スコア147054
回答へのコメント
2017/10/17 05:58
abcの場合だけ2倍になるよう調整するとかでしょうか sqliteで動くかはわかりませんが、普通のSQLなら以下でいけると思います
SQL1select sum(price*(case menu_id when abc then 2 else 1 end)) 2from menu where menu_id = abc OR menu_id = def
SQL
1select sum(price*(case menu_id when abc then 2 else 1 end)) 2from menu where menu_id = abc OR menu_id = def
投稿2017/10/17 05:50
総合スコア118405
結構考えましたけど、こんなのしか思いつかなかったです。悔しいですね。
sqlite> select sum(price) from ...> ( ...> select price from menu where menu_id='abc' union all ...> select price from menu where menu_id='abc' union all ...> select price from menu where menu_id='def' ...> );
投稿2017/10/17 06:00
総合スコア495
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.29%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
SQLiteでSUM関数を使う際にWHERE句で重複したものがあると加算されない
2017/10/17 05:58