なお、PostgreSQLには式インデックスという機能があって、それを作ればインデックスが使われる。 create index hoge_calc_idx on hoge((year*100+month)); > Bitmap Index Scan on hoge_calc_idx (cost=0.00..106.42 rows=5000 width=0) (actual time=13.776..13.776 rows=100600 loops=1) > Index Cond: ((((hoge.year * 100) + hoge.month) >= 201604) AND (((hoge.year * 100) + hoge.month) <= 201703)) > Execution time: 74.346 ms 0324NAME IS NULL2017/05/09(火) 18:45:08.23ID:???>>3140325NAME IS NULL2017/05/10(水) 10:29:23.99ID:???>>324 まあ、微粒子レベルで俺が間違ってる可能性があるからな 0326NAME IS NULL2017/05/10(水) 10:41:42.84ID:???>>325 お前が>>323なら、おかしいのはお前の相手の方だから心配すんな >>268からずっとおかしい 相手するだけ無駄 0327NAME IS NULL2017/05/10(水) 10:55:53.42ID:??? 今時、コストベースがどうこうとか言う奴だからな。 10年以上前にちょろっとDB触ったレベルの奴じゃね? 0328NAME IS NULL2017/05/10(水) 14:06:04.96ID:??? ・ストアドにしてオーバーロードしろ ・インデックス使いたいならdate型にしろ ・date型にしないなら個別インデックスにしろ ・Bit Map Indexガー ・ソートガー
全部同じやつでしょ 最初からおかしい 0329NAME IS NULL2017/05/10(水) 17:35:34.21ID:??? 今更というかやっと式インデックスが出てくる脱力感 0330NAME IS NULL2017/05/10(水) 18:21:15.72ID:???>>329 式なんか使わずに普通にクエリ書けと何度言ったら 0331NAME IS NULL2017/05/15(月) 18:17:10.53ID:/ZtiK+kF Local and global coordinate system 0332NAME IS NULL2017/05/29(月) 23:01:50.19ID:OpaRYJdt ・Postgresql 8.4
・説明 列col_aの文字列が同じで、col_bとcol_cの数値が一致しないタプルを取り出したいのですが どのようなSQLでいけるでしょうか?よろしくお願いします。 0333NAME IS NULL2017/05/29(月) 23:52:29.72ID:???>>332 SELECT S1.col_a, S1.col_b, S1.col_c FROM 'テーブル名' S1 , 'テーブル名' S2 WHERE S1.col_a = S2.col_a AND (S1.col_b <> S2.col_b OR S1.col_c <> S2.col_c) ORDER BY S1.col_a ;
間違ってたらごめん 0334NAME IS NULL2017/05/29(月) 23:57:58.93ID:ppw3vS3C>>332 グループ化で複数レコードが存在存在するnameを排除すればいい。 0335NAME IS NULL2017/05/30(火) 00:12:21.01ID:??? 複数レコードが存在するレコードを削除すればよい、ではなくてか。 having count(*) = 1 みたいに。 0336NAME IS NULL2017/05/30(火) 00:13:06.46ID:??? 削除っていうと聞こえが悪いけど、そこはご勘弁 0337NAME IS NULL2017/05/30(火) 14:28:59.06ID:dt3JZxtj>>332 DISTINCT 0338NAME IS NULL2017/05/30(火) 14:35:58.66ID:??? まとめると SELECT col_a, col_b, col_c FROM テーブルデータ GROUP BY (col_a, col_b, col_c) HAVING COUNT(*) = 1 こうかね? ORDER BYもいるとは思うけど
DISTINCTは name2 0 2 も1件でちゃうような 0339NAME IS NULL2017/05/30(火) 15:13:05.29ID:??? select * from テーブルデータ where col_a in (select col_a from テーブルデータ group by col_a,col_b,col_c having count(*) = 1); 0340NAME IS NULL2017/05/30(火) 16:13:29.76ID:??? a,b,c以外にも表示したいときはそうなるか まあ (a,b,c) in (select a,b,c from 〜 ) とかになるだろうけども 0341NAME IS NULL2017/07/11(火) 14:39:34.13ID:VmiHpvub 項目A,B,C,Dの値を入れ替えたいです。 ・DBMS名とバージョン:postgreSQL 8.4.13 ・テーブルデータ A B C D 1 2 3 4 1 2 3 4 2 3 4 1 このテーブルのAの値をBに、Bの値をCに、Cの値をDに、Dの値をAに入れたいです。 A B C D 4 1 2 3 4 1 2 3 1 2 3 4 としたいです。
UPDATE TABLENAME SET A = D, B = A, C = B, D = C; でよいのでしょうか。よい場合、変更する項目数が50位でも大丈夫でしょうか。 検索したところ、2項目の入れ替えはこれでよいようなのですが、 複数(多数)の場合でもよいものか教えていただきたいです。 よろしくお願いします。 0342NAME IS NULL2017/07/11(火) 14:42:47.22ID:???>>341 それでいい 0343NAME IS NULL2017/07/12(水) 02:12:00.48ID:???>>342 ありがとうございました。自信を持って(?)作業します。 0344NAME IS NULL2017/07/12(水) 05:24:51.54ID:??? え、BにDの値入らない?大丈夫? 0345NAME IS NULL2017/07/12(水) 10:20:42.90ID:???>>344 大丈夫
create temporary table tmp select d as a,a as b, b as c, c as d from TABLENAME; delete from TABLENAME; insert into TABLENAME select * from tmp; 0351NAME IS NULL2017/07/13(木) 05:58:18.91ID:??? 【テンプレ】 ・DBMS名とバージョン : mysql Ver 14.14 Distrib 5.1.73, ・テーブルデータ : 添付画像をご覧ください ・欲しい結果 ; 添付画像をご覧ください
MySQLTunerを実行してみると failed to execute: SELECT VERSIONのようなのが鬼のように表示され、 General recommendationsに下記のように表示されてます。
query_cache_size (=0) query_cache_type (=0) query_cache_limit (> 1M, or use smaller result sets) join_buffer_size (> 128.0K, or always use indexes with joins) tmp_table_size (> 16M) max_heap_table_size (> 16M) thread_cache_size (start at 4) table_open_cache (> 400) performance_schema = OFF disable PFS innodb_file_per_table=ON innodb_log_file_size * innodb_log_files_in_group should be equal to 1/4 of buffer pool size (=64M) if possible.
(=0)は0にしなさい。 (> 1M)は1MB以上に指定しなさい。 それに合わせてmy.confに入れてみたんですが、 これが全く変わりません。 0361NAME IS NULL2017/07/16(日) 10:22:53.35ID:??? straceしてみてどの設定ファイル読んでるか確認してみたら? 0362NAME IS NULL2017/07/17(月) 08:19:42.44ID:??? 久しぶりに来た半初心者なのですが、上の方の議論で出てた会計年度の話は、単に引き算を利用してはいけなかったんでしょうか
4ヶ月引いて1日足して、としてやれば安定して通常年度に戻せる気がするのですが 0363NAME IS NULL2017/07/17(月) 10:26:23.55ID:ELQvIlPL 日付から年度を求めたい、という話? そういうのでもいいけどそれ間違ってるからね 0364NAME IS NULL2017/07/17(月) 10:28:40.66ID:??? どの話をしようとしているのか分からん
4ヶ月引いて1日足すというだけでも 30日に1日足したら31日になるのか1日になるのかどう判断するんだ? 0365NAME IS NULL2017/07/17(月) 10:39:33.34ID:???>>363 ほんとだ なんで足す1出てきたし4なんですかね
なんにせよありがとう 0366NAME IS NULL2017/07/23(日) 12:32:38.73ID:??? 例えば、左から右に行って、 途中でジェイってなって、そのまま終わったらいいかと思うんですが。 新しいSQLの概念というか。 0367NAME IS NULL2017/07/23(日) 15:48:13.53ID:???>>386が何を言ってるのかさっぱり判らぬ 0368NAME IS NULL2017/07/23(日) 15:48:48.68ID:??? 間違えた。 >>386じゃなく>>366だった^^; 0369NAME IS NULL2017/07/23(日) 16:38:22.44ID:??? 大丈夫、俺も分からん 0370NAME IS NULL2017/07/23(日) 16:58:56.49ID:??? RDBMS使ってRPG作ろうとしているのかな? 0371NAME IS NULL2017/07/23(日) 19:13:31.67ID:ic0ZKVtq 月末日なんて翌月の1日前なのになw 0372NAME IS NULL2017/07/23(日) 19:42:03.08ID:???>>371 その翌月の日が1日だったらな 0373NAME IS NULL2017/07/23(日) 19:49:11.25ID:???>>372 は? 0374NAME IS NULL2017/07/23(日) 21:05:31.62ID:???>>372 月末の次の日が1日じゃないケースってなに? 0375NAME IS NULL2017/07/23(日) 21:59:12.88ID:???>>371の言う「翌月の1日前」が「翌月の1日の1日前」という意味なら、ってことだろ。 0376NAME IS NULL2017/07/23(日) 22:36:23.90ID:??? 7月23日の翌月の1日前は8月22だろjk 0377NAME IS NULL2017/07/23(日) 22:46:18.66ID:??? おまえ、そんな頭のレベルでよくSQL云々出来るなぁ 0378NAME IS NULL2017/07/23(日) 23:25:31.06ID:??? IPAの試験が、読解力を試されるような問題だらけになるわけだ。 0379NAME IS NULL2017/07/23(日) 23:40:56.92ID:??? 営業日の話ししてんじゃないのか 0380NAME IS NULL2017/07/24(月) 00:34:13.18ID:??? 複数の同一形式のcsvからデータを読み取る時、普通は↓こんな風に定義するけど、
SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVGtableA.英語)AS 英語平均 FROM tableA,tableB WHERE tableA.日付 >= tableB.採点開始日 AND tableA.名前,tableB.名前 0382NAME IS NULL2017/07/26(水) 22:18:02.28ID:???>>381 tableA は 日付、名前、国語、英語 です。 0383NAME IS NULL2017/07/26(水) 22:38:14.43ID:???>>381
SELECT tableA.名前,AVG(tableA.国語)AS 国語平均,AVG(tableA.英語)AS 英語平均 FROM tableB inner join tableA on tableA.日付 >= tableB.採点開始日 AND tableA.名前=tableB.名前 group by tableA.名前 でいいんじゃないかな