DISTINCT を使えばできそうです。 ありがとうございました。 0619NAME IS NULL2018/11/23(金) 20:05:35.29ID:???>>617 こうじゃないか
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`; 0620NAME IS NULL2018/11/24(土) 03:57:01.05ID:??? 効率悪いし、何名か?が取れないと思う 0621NAME IS NULL2018/11/24(土) 03:58:33.86ID:??? distinctについてね 06226172018/11/24(土) 12:35:17.12ID:???>>619
ありがとうございます。 助かりました。 0623NAME IS NULL2018/11/24(土) 16:31:58.75ID:Pyo9iAE3 再び質問です。 教えてもらった
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`;
で得られる'人数’を同じテーブル内の別カラムに保存したいと思い、 カラムは事前に作成しておいて、
update 'テーブル' set '人数のカラム' = (select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業`)
その後、order by でなく、select以下のテーブルをtable as Tなどとしてwhere句で’テーブル’とTの要素が等しい時に限定したら一応できました
何故かブロックされたのでスマホから 0627NAME IS NULL2018/11/24(土) 17:49:44.47ID:Pyo9iAE3>>625 使用意図は、エクセルの表計算のように、 左のカラムにデータがあって、それを元に 右の方のカラムに途中計算を書いていって、 最後に得られた結果の誤差が減るように また最初の方から計算を繰り返すような感じです。
1巡の計算が大きすぎて記録を残したいのですが、ご指摘の通り、記録が不要なところはテーブル変数がよさそうです 勉強してみます 0628NAME IS NULL2018/11/24(土) 17:50:56.49ID:??? オレ多分頭悪いんだろう >>626 で何を言っているのかよく分からない
愚直に>>623の要求通りのものを書くとすれば `テーブル`に`人数`カラムを追加したとして update `テーブル` t1 set `人数` = ( select `人数` from ( select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル` group by`性別`,`血液型`,`職業` ) t2 where t1.`性別` = t2.`性別` and t1.`血液型`= t2.`血液型` and t1.`職業` = t2.`職業` );
でも、こんなこと実際にはしないし、 もっと良い方法が必ずあるはずだし 見直した方がいい 0629NAME IS NULL2018/11/24(土) 18:02:53.98ID:Pyo9iAE3>>628
なんだか変な事をやってるみたいで恐れ入ります 0630NAME IS NULL2018/11/24(土) 18:07:07.78ID:??? 結局何をしたいのかさっぱり理解できないけどわざわざ違うモデルで答えさせるとか失礼な事するやつだからスルーしとくわ 0631NAME IS NULL2018/11/24(土) 18:18:02.74ID:??? 質問をシンプルにしたくてモデルを 変えましたが、失礼と思われたようで 済みません 0632NAME IS NULL2018/11/24(土) 18:26:04.19ID:??? わざわざスルーするって宣言してる奴なんだからスルーでいいよ 0633NAME IS NULL2018/11/24(土) 21:20:38.92ID:??? 合計値も平均値も割と簡単に計算出来ますし それをテーブルに入れた方が良いのか それともDBを見ているミドルの方で計算させた方が良いのか 全体の仕組みと性能で総合的に考えた方が良いかもしれません 0634NAME IS NULL2018/11/25(日) 01:43:22.84ID:+jUq2Ssihttp://altohumano.com/gt-r%e3%80%80%E8%B2%B7%E5%8F%96/0635NAME IS NULL2018/11/26(月) 21:45:52.63ID:??? mysql,mariadbでmyisamが非推奨になったのはなぜですか? innodbではbeginやcommitが使えるそうですが、メモ的なデータをinsertするぐらいなのですが、 それでもinnodbを使った方がいいのでしょうか? 0636NAME IS NULL2018/11/26(月) 22:42:16.59ID:??? そういうのは各RDBのスレがあるんだから、そこで聞けよ 0637NAME IS NULL2018/11/26(月) 23:01:09.03ID:???>>635 こちらで聞いてみたら
MySQL SQL質問応答スレ https://mevius.5ch.net/test/read.cgi/db/1478776715/0638NAME IS NULL2018/11/27(火) 03:05:52.60ID:??? 専用スレがあったのですね、誘導ありがとうございます。 0639NAME IS NULL2018/11/28(水) 16:28:54.70ID:ZtGMc1/U 【勝谷誠彦(57)死去】 人口が毎年20万人も減るほど被曝して応援させ、さらに70歳まで働いて応援 http://rosie.5ch.net/test/read.cgi/liveplus/1543371270/l500640NAME IS NULL2018/11/29(木) 10:10:36.91ID:??? 以下のようなデータがあった場合、 name date rate AAA 11/1 2000 BBB 11/1 900 CCC 11/1 500 DDD 11/1 700 AAA 11/2 2000 BBB 11/2 1200 CCC 11/2 500 DDD 11/2 700 AAA 11/3 2000 BBB 11/3 500 CCC 11/3 1500 DDD 11/3 700
最新のrateが1000未満だけを抽出するにはどうすればよいでしょうか? DDD 11/3 700 BBB 11/3 500 0641NAME IS NULL2018/11/29(木) 11:07:44.82ID:???>>640 こうかな? select name, MIN(date), rate from hoge where rate < 1000 group by name, date, rate 06426412018/11/29(木) 11:26:02.69ID:??? 違った、こうか? select a.name, a.date, a.rate from hoge as a, (select name, MAX(date) from hoge where rate < 1000 group by name, date) as b where a.name = b.name and a.date=b.date; 0643NAME IS NULL2018/11/29(木) 13:04:58.18ID:??? SELECT * FROM a WHERE (name,date) IN (SELECT name,MAX(date) FROM a GROUP BY name) AND rate<1000 0644NAME IS NULL2018/11/29(木) 13:09:17.80ID:???>>642 レスありがとうございます。 試したのですが、fromのselectでMAX(date)以外のも全て列挙されてしまいます。 DDD 2018/11/01 00:00:00 BBB 2018/11/01 00:00:00 CCC 2018/11/01 00:00:00 DDD 2018/11/02 00:00:00 CCC 2018/11/02 00:00:00 DDD 2018/11/03 00:00:00 BBB 2018/11/03 00:00:00 ちなみに使用DBはpostgresqlです。 0645NAME IS NULL2018/11/29(木) 13:14:19.05ID:???>>643 おお!できました!! ありがとうございます! 整理して理解します。 0646NAME IS NULL2018/11/29(木) 16:31:32.41ID:??? こういうときに色々意地悪な条件をついつい考えてしまう 最新日って言う場合、1件だけになるのか、 それとも同一日は全部該当にするのか 結果表示に時刻まで出てきていると悩んでしまう その後の処理で何を使いたいかにもよるんだろうけど 0647NAME IS NULL2018/11/29(木) 23:50:24.51ID:0rvo1ya5>>646 ここで質問してくるやつはいつも仕様などあまり考えていない。 0648NAME IS NULL2018/12/03(月) 19:05:02.42ID:??? 2つの文字列カラムがあり、一方がもう片方の文字列から始まるものだけを抽出したい場合どうすればいいですか? str1 str2 ABC ABCDEF DEF aiu GHI GHIxxx JKL akasa の場合、 ABC ABCDEF GHI GHIxxx 0649NAME IS NULL2018/12/03(月) 20:36:59.12ID:???>>648 str1の長さがstr2より短いことがわかってるなら where left(str2, len(str1)) = str1 でいいかと 0650NAME IS NULL2018/12/03(月) 22:05:33.10ID:??? ためしてないけど、 where (str1 like str2+'%') or (str2 like str1 + '%')とかでどうだろう 0651NAME IS NULL2018/12/03(月) 22:51:42.17ID:???>>648 んじゃ他ので WHERE PATINDEX(str1 + '%', str2) = 1 0652NAME IS NULL2018/12/04(火) 10:41:43.68ID:???>>649>>650>>651 お三方、ありがとうございました。 ばたばたしてて遅くなりましたが、確認できました。 0653NAME IS NULL2018/12/04(火) 11:20:56.24ID:???>>650-651 str1とかstr2に'%'含んでても大丈夫だっけ? 0654NAME IS NULL2018/12/04(火) 11:59:27.62ID:KJK6oDpE 大丈夫。ただ+が使えるのはMS系だな。 後は使えるやり方に読み換えて 0655NAME IS NULL2018/12/09(日) 16:50:28.29ID:??? SQL SERVERのSQL文について質問です
postgresql9です。 0663NAME IS NULL2018/12/17(月) 19:37:22.24ID:???>>662 postgresql9手元で動かせません。MariaDBです テーブル名はproductと仮定しました
select * from product where (major_ver,minor_ver) in ( select major_ver,max(minor_ver) from ( select major_ver,minor_ver from product where major_ver = (select max(major_ver) from product ) ) as t ); 0664NAME IS NULL2018/12/18(火) 00:22:00.75ID:???>>663 なるほど。メジャーの最大グループからマイナーの最大を取った where in句ですか ありがとうございます。 0665NAME IS NULL2018/12/18(火) 01:53:40.53ID:??? window関数使うともっと綺麗に書ける気がする
俺はwindow関数苦手だから書けないが 0666NAME IS NULL2018/12/18(火) 23:18:20.88ID:d1jtTCeB>>661 あんたはDATE型が文字列だとでも思っているのか? 0667NAME IS NULL2018/12/27(木) 14:42:38.04ID:??? a. 顧客テーブル(顧客コード, 顧客名) b. 商品テーブル(商品コード, 商品名) c. 売上テーブル(売上日, 顧客コード, 商品コード, 売上数) ↓ 売上日, 顧客名, 商品名, 売上数
このように結果が表示されるSQL文を教えてください 0668NAME IS NULL2018/12/27(木) 15:25:29.94ID:??? 何か基本のキって感じ これが書けないとヤバいと思う 0669NAME IS NULL2018/12/27(木) 15:29:31.60ID:??? こういうのって内部と外部とどっちで繋ぐのがよろしいの? それとも、JOINではなくWHERE内でキーを繋いであげればいいの?? 0670NAME IS NULL2018/12/27(木) 19:19:36.61ID:??? joinを使いなされ 0671NAME IS NULL2018/12/27(木) 19:28:59.29ID:??? まだ書かれていない要求仕様があるんじゃない? 読み取れる範囲だとどっちでも良いように思う 0672NAME IS NULL2018/12/28(金) 01:38:09.32ID:???>>667 select 売上日, 顧客名, 商品名, 売上数 from 売上テーブル inner join 顧客テーブル on 顧客テーブル.顧客コード=売上テーブル.顧客コード inner join 商品テーブル on 商品テーブル.商品コード=売上テーブル.商品コード
>>669 FROMに複数テーブル書いてwhereに結合条件書くのは今は推奨されない 内部か外部かは、商品テーブルにない商品売ってたり顧客テーブルにない顧客に売ってたりしない限りどちらでも同じ結果 どっちでもいいなら普通は内部結合にするんじゃね 0673NAME IS NULL2018/12/28(金) 08:19:26.48ID:???>>672 ありがとうございます メモしておきます 0674NAME IS NULL2018/12/28(金) 16:26:23.93ID:??? 外部キーがあればinnerなければleft joinかな 0675NAME IS NULL2018/12/28(金) 22:03:16.91ID:??? このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う? http://bigsta.net/media/1933567086757747003_35649070980676NAME IS NULL2018/12/28(金) 23:11:45.98ID:???>>675 ブラクラ 0677NAME IS NULL2018/12/29(土) 10:58:20.71ID:???>>672 そうなのか、勉強になったわー。 講習受けたときはJOINで教わったのに、実際にWHEREで書かれたの使ってる人たちがいて何でだろうと不思議だったんだけど、 歴史的な表記ぶれみたいなもんなんだな。 商品登録がない商品を売ってる可能性とかも全然思いつかなかった。 0678NAME IS NULL2018/12/29(土) 11:00:50.31ID:???>>674 外部キー無いけど繋ぐって、どんなシチュエーション?? 0679NAME IS NULL2018/12/29(土) 19:17:07.38ID:/5Z8+3Hw>>677 結合条件をFROM句にしたのは標準SQL。ただ構文が長ったらしいのは失敗だった。 0680NAME IS NULL2018/12/29(土) 19:20:03.23ID:/5Z8+3Hw>>672 推奨されない?
そんな嘘を書くな。
製品によって結合条件の構文の一部が非推奨になっただけ。 0681NAME IS NULL2018/12/29(土) 19:21:06.30ID:/5Z8+3Hw>>677 上の世代からするとなんでFROM句に書きたがるのか疑問なんだよ。 0682NAME IS NULL2018/12/30(日) 09:09:04.13ID:??? どのテーブルにも脳死したかのように createdとupdatedっていうtimestampなカラムがあるんですが普通なんですか?