
こんにちは。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
[MySQL] UNIQUE制約の値を更新...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
LAST_INSERT_IDで同時にアクセ...
-
Updateの複数テーブル条件時のL...
-
証明写真機の設置場所が知りたい
-
select文のwhere句に配列を入れ...
-
SQLサーバから、項目の属性(型...
-
SQLにて特定の文字を除いた検索...
-
親と子供が複数のSQL取得方法
-
Mysql でレコードを追加した時...
-
Excel2000でレーダーチャートの...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
SELECT~LIKE~の結果が変
-
ある条件の最大値+1を初番する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
1テーブル&複数レコードの更新...
-
PL/SQLの変数について
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
バインド変数について
-
inner joinをすると数がおかし...
-
MySQLのint型で001と表示する方...
-
updateを1行ずつ実行したい。
おすすめ情報