こんにちは。
SQLite3で次のようなクエリを書けるかどうかご存じの方、教えてください。
文房具の商品レコードを格納したテーブルがあります。
えんぴつ50円、ノート100円、ホチキス150円といった具合です。このテーブルから無作為にレコードを取り出し続けたいのですが、取り出した複数レコードの金額の合計が1000円を超えたところでストップしたいです。1050円でも1200円でもいいのですが、超えたところで止めたいのです。
インターフェイスとしてPHPを予定していて、そこででごにょごにょすればできるのですが、そもそもSQLの時点でこうしたことができるのかご存じの方教えてください。
No.1ベストアンサー
- 回答日時:
SQLiteには累積計算はないので、2つの同じ table を結合して、group 化という手順が必要だが、randam 順が同じ2つのテーブルを用意するには、temporary table を作る必要が有ると思う。
元のテーブルに primary keyカラム id が有るとして、以下の定義だとすると
create table bungu (
id integer primary key not null
,name char
,nedan int
);
create temporary table t_bungu
as select id ,nedan from bungu b order by random ;
-- 毎回作り直しすれば、毎回違う順になるので、temporary とする。
select id, name, nedan from bungu as a
where id in ( select id from t_bungu c join
( select a._rowid_ , sum(nedan) as x
from t_bungu a join t_bungu b on a._rowid_ >= b._rowid_
group by a._rowid_
having sum(nedan) > 1000
limit 1
) d on d._rowid_ >= c._rowid_
);
-- _rowid_ は、t_bunguテーブルに挿入された順。SQLite は、primary key がなくても、これで、行の特定が可能
-- 多重サブクエリは問題なく実行できます。実行速度的にどうなのかは、未検証。何千行もあるとかでなければ、そう待たされはしないと思うけど。
No.2
- 回答日時:
あ、見直してたら、テーブルエイリアス名の抜けを発見。
sum(nedan) のところ、2カ所とも、b エイリアスを加えて下さい
sum(b.nedan)
実行チェックまで行ってないのがばればれ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- SQL Server これをSQL文で出来るでしょうか? 1 2023/03/26 02:16
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Excel(エクセル) 【エクセル関数】複数条件に該当する場合、別の列の数値を合算する。 9 2022/07/09 08:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
SQLにて特定の文字を除いた検索...
-
エクセルの関数について教えて...
-
バインド変数について
-
select文のwhere句に配列を入れ...
-
insertを高速化させたい
-
Postgreのupdateコマンドでエラー
-
MySQLのDATE型カラム値がNULLの...
-
LEFT JOIN と GROUP BY
-
Unionした最後にGROUP BYを追加...
-
クエリ表示と、ADOで抽出したレ...
-
期間の重複を調べるSQL文につい...
-
多段外部結合はできる?
-
Accessで差分取得する方法は? ...
-
selectで拾ってきたデータをも...
-
複数JOINしているとCOUNTが正し...
-
データベースで、Prefixを付け...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報