X



トップページDB@2ch掲示板
1002コメント319KB

SQL質疑応答スレ 18問目

■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2018/01/04(木) 22:12:22.14ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 17問目
https://mevius.5ch.net/test/read.cgi/db/1468157341/
0748NAME IS NULL
垢版 |
2019/02/10(日) 18:22:16.70ID:6fMC7oP8
>>744
同時実行時にどうやって連番が振れるのか考えた方がいい。

ユーザーがよく連番にしてくれというが、データそのものが連番を持っている必要はない場合が多い。

シーケンスを使うと歯抜けになるが、歯抜けで何か問題がどうか聞け。

どうしてもやりたければ、番号を管理するテーブルを用意して、一瞬、テーブルをロックして最大値を求めてレコードを追加したり更新したりすることで実現する。

レコードが削除されたときは番号を降り直すのかどうかも事前に聞け。

ユーザーは単に表示されている件数とデータの番号が一致していたら、わかりやすい程度のことしか言っていない。
0750NAME IS NULL
垢版 |
2019/02/10(日) 20:11:17.09ID:???
>>746
これが何なのか読んでもわからんすw
というかORM使ってるのでこの型使えるのだろうか
>>747
>>748
確かに連番である必要は無いです
適当に被らない番号を振ってもらえれば良いんだけどそういう句はあります?
0751NAME IS NULL
垢版 |
2019/02/10(日) 23:07:57.76ID:???
>>750
どういうやり方で最初の空のテーブルを作成してますか?
0752NAME IS NULL
垢版 |
2019/02/11(月) 04:27:17.82ID:XERbxblT
>>750
シーケンスを作って、シーケンスから新しい番号を取る。

製品によって異なるから「PostgreSQL シーケンス NEXTVAL」のキーワードでくぐって勉強して。
0753NAME IS NULL
垢版 |
2019/02/11(月) 23:07:27.20ID:I14UVxY+
>>751
CREATE TABLE prices (
id INTEGER,
date DATE NOT NULL,
market_price INTEGER,
nav_price FLOAT,
retrieval_date DATE,
PRIMARY KEY (date)
)

というSQL です。id をインクリメントしたいんですが 

>>752
ググっても使い方がwかりませんでした
0754NAME IS NULL
垢版 |
2019/02/11(月) 23:12:13.51ID:XERbxblT
だめだこりゃ
0755NAME IS NULL
垢版 |
2019/02/11(月) 23:43:33.61ID:???
>>752
質問をいくつか

idを連番にして一意にしたいって事ですか?

dateをプライマリキーにしていますが、
このテーブルデータのデータを一意に特定したいときに
dateを指定するって事ですか?
0756NAME IS NULL
垢版 |
2019/02/12(火) 13:36:18.57ID:eWsZ2mFu
>>755
dateとは?
0757NAME IS NULL
垢版 |
2019/02/12(火) 17:33:47.98ID:???
date DATE NOT NULL,
PRIMARY KEY (date)
0758NAME IS NULL
垢版 |
2019/02/12(火) 19:40:53.09ID:???
>>746の回答で終わってる話だし、自分で調べる気がないようだから
これ以上構わないほうが良いぞ
0759NAME IS NULL
垢版 |
2019/02/12(火) 21:40:34.30ID:hyYi05zW
>>755
date で一意にしたいです

>>758
つまりカラムの型をSEREALにすれば良いんですね PRYMALY KEYにしか使えないんですね
0760NAME IS NULL
垢版 |
2019/02/13(水) 00:29:25.04ID:???
何をしたいのかがよく分からないけれど
率直に言うと、テーブル定義を見ただけで、これは酷いと思った
ここで質問するにしても基本が出来ていないと
質疑そのものが成り立たないと思う
一つ一つ教えてやれるほど暇な人はここにはいないと思うので
まず自力でテーブル設計の基本から学び直した方が良いだろう
0761NAME IS NULL
垢版 |
2019/02/13(水) 01:28:24.13ID:bwrqc7Ol
う〜ん厳しいっすね、
達人に学ぶDB設計指南書
という本を読んで出直してきます
ありがとうございました。
0762NAME IS NULL
垢版 |
2019/02/13(水) 11:26:56.25ID:???
教えてください。
12c ってWindows10Homeには対応していないのでしょうか?
インストールしようとすると、最初の段階でフリーズしてそのままなんですが。。。
それとも自分のやり方が間違っているのか?
0763NAME IS NULL
垢版 |
2019/02/13(水) 12:26:16.60ID:???
> それとも自分のやり方が間違っているのか?
Yes.

Oracleに聞け
0764NAME IS NULL
垢版 |
2019/02/13(水) 16:28:18.68ID:RDoKqAmg
>>762
Windows 10 Homeには対応していません。Windows 10 HomeはIT技術者が使うようなものではありません。
0765NAME IS NULL
垢版 |
2019/02/13(水) 19:12:25.52ID:???
Windows10でも64ビット版なら対応してるみたいだな
0766NAME IS NULL
垢版 |
2019/02/13(水) 23:53:03.82ID:???
おいおい、そもそも12cってなんだ?
0767NAME IS NULL
垢版 |
2019/02/14(木) 00:13:36.28ID:???
>>762
Win10Home x64 に Oracle12c 入れてるよ
Release2 だと言うように途中で止まったけど Release1 は最後まで行った
0768NAME IS NULL
垢版 |
2019/02/14(木) 00:51:18.49ID:rVmZaTkp
動くのとサポートしているかどうかは別問題。
0769NAME IS NULL
垢版 |
2019/02/14(木) 00:52:15.11ID:rVmZaTkp
こういう勝手な組み合わせで使って文句をサポートに言ってくる会社は必ずある。
0770NAME IS NULL
垢版 |
2019/02/14(木) 00:53:47.16ID:rVmZaTkp
>>766
視力検査で「みぎ」と言えば視力1.2と判断される。
0772NAME IS NULL
垢版 |
2019/02/15(金) 18:52:16.64ID:BQV0WL9f
基本情報の古い過去問のデータベースが解けません。解説してください。
平成18年度春期 基本情報 問1 空欄c 答えは「ア」
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2006h18_1/2006h18h_fe_pm_qs.pdf

SELECT 社員ID FROM 社員表
WHERE 年齢 < ALL(SELECT 年齢 FROM 家族表
WHERE 家族表.社員ID = 社員表.社員ID)

副問い合せ、相関副問合せは理解しています。
副問合せの結果リストが0行の場合、なぜ<ALLの条件が成立してしまうのかわかりません。
oracleの環境で試してみたところ >ALL でも =ALL でも、副問合せの結果リストが0行の場合、真となるようでした。
よろしくおねがいします。
0773NAME IS NULL
垢版 |
2019/02/15(金) 19:58:39.46ID:slwoR7Dy
>>772
ALLは真偽値を返すのではなく、副問い合わせの結果すべてに当てはまるかどうかの条件構文。
0774NAME IS NULL
垢版 |
2019/02/15(金) 20:05:16.74ID:slwoR7Dy
>>772
結果リストがゼロ件の場合は、FALSEでもNULLでもTRUEでもないため、条件そのものがない扱いになる。
0775NAME IS NULL
垢版 |
2019/02/15(金) 20:11:56.83ID:slwoR7Dy
正確には結果が返らないため、どの年齢もTRUEになってすべてのレコードが対象になる。
0776NAME IS NULL
垢版 |
2019/02/15(金) 20:14:08.31ID:slwoR7Dy
SELECT文の結果の対象レコードが存在しない状態はNULLではない。
0777NAME IS NULL
垢版 |
2019/02/15(金) 21:29:59.00ID:???
>>772
ALLはその副問い合わせが空のときはTrueと決まってるから
イマイチ直感的ではないけど、そう決まってるからしょうがない

条件そのものが無い扱いになったりするわけじゃない
ALL条件はTrue/Falseを返す(この場合はTrue なぜならそう決まっているから)
0778772
垢版 |
2019/02/18(月) 09:17:02.02ID:Vl1v2yYD
皆さんありがとうございました。よく分かりました!
0779NAME IS NULL
垢版 |
2019/02/22(金) 21:56:20.09ID:???
MySQLの使い方に悩んでる。
WebアプリケーションでToDoリスト作るとして
ToDoリストのデータとして5つのテーブルが必要です。
Aさん、Bさん、Cさんがそれぞれ保存し、各自、自分が登録したToDoのみが見れます。
このような場合、SQLサーバでは、Aさん用データベース、Bさん用DB、Cさん用DBを作成する。
という使い方は変ですか?
0780NAME IS NULL
垢版 |
2019/02/22(金) 21:58:20.75ID:???
>>779
補足、使用人数は例では3人ですが、100人以上の可能性あり
0781NAME IS NULL
垢版 |
2019/02/22(金) 22:38:20.63ID:???
ひとつのテーブルで行ごとにアクセス権を設定できるDBMSもあるにはあるけど
(MySQLでできるかどうかは知らん)
アプリケーション側で制御するのが普通
ユーザーごとにテーブルを分けるのは普通じゃない
0782NAME IS NULL
垢版 |
2019/02/22(金) 23:41:46.14ID:???
MySQLでもユーザー毎にdatabaseを割り当ててアクセス権を設定すれば出来ないことはないが
そこまでする必要があるのって、ユーザーにテーブル作成や削除までやらせたいときくらいじゃないか?
0783NAME IS NULL
垢版 |
2019/02/23(土) 07:25:16.90ID:???
ありがとうございます。>>779です。
SQLに対してDBを作ったり、テーブルを作ったりするのはToDoアプリ側で、ユーザーはToDoアプリの操作のみです。
アプリの保存データをSQLで管理したいという話なのですが、
こういうときは、データベースごとに分けるのが普通ではないというなら、普通はどんな方法で管理するのでしょうか?
@ 一つのDB内に、Aさんのテーブル5つ。Bさんのテーブル5つ作る 。(テーブルが増えていく)
A 一つのDB内に5つのテーブルがありその中でAさんのレコード、Bさんのレコードを作っていく。(レコードが増えていく)
B 名前をつけて保存で、新しいDBを作りその中に5つのテーブルを作る。(DBが増えていく)
0784NAME IS NULL
垢版 |
2019/02/23(土) 07:52:54.75ID:???
人が増減するのに合わせてDBやテーブルを増減するのってその管理がまた
大変だろ…。これ言うとここで鬼門の削除フラグが〜になってしまうけどw
0785NAME IS NULL
垢版 |
2019/02/23(土) 08:14:15.37ID:???
昔、IBMが作ったシステムの設計見たらビューで権限のあるレコードだけ表示できるようにしていた。
そんなんでパフォーマンスが出るのかと思ったけど、結構大規模なDWHでもそこそこの速度が出ていた。
もしかしたらIBMのチューニング力のなせる業だったのかもしれないが。
0786NAME IS NULL
垢版 |
2019/02/23(土) 08:21:42.86ID:???
>>784 ありがとうございます。ということは、ユーザーの操作により、DBやテーブルの作成はあまりしない方が良いということですね。
アプリ起動時に、DBが無ければ作成したかったんですがそれもやめた方がいいのか?事前に作成しておくのが普通?

>>785 なるほど、ビューを使えば個人毎のテーブルとして扱えるって事ですね。

SQL文は理解したんですが、全体的な使い方がイマイチでして、こういう時に役に立つ書籍が何かあれば教えて下さい…
使い方なんて人それぞれっていうのは分かってるんですが。
0787NAME IS NULL
垢版 |
2019/02/23(土) 08:41:19.07ID:???
DBMSのことをSQLとか言う奴の相手するなよ…
0788NAME IS NULL
垢版 |
2019/02/23(土) 13:28:01.08ID:???
>>786
>事前に作成しておくのが普通?
普通は動的にテーブル作ったりしない

>アプリ起動時に、DBが無ければ作成
WEBアプリだよな
アプリってクライアント側かサーバ側かどっちのことを言ってるんだよ
普通クライアントが直接DB弄ることなんかないだろ


つか設計スレいけ
0789NAME IS NULL
垢版 |
2019/02/23(土) 20:49:34.96ID:bVMedebm
>>786
ひとりずつ分けて管理するというのは紙媒体の考え方だから、素人がそういう設計を思いつくのは理解できる。

ただし、リレーショナルデータベースの世界では、かなりおかしな発想。

操作できるのが自分のデータのみであれば、自分のデータかどうかどうして区別できないと思うのか?

権限という概念がどうしてあるのか、勉強した方がいい。
0790NAME IS NULL
垢版 |
2019/02/24(日) 09:44:27.01ID:???
>>688
>>689
ありがとうございます!
もう少し考えて勉強します。
0791NAME IS NULL
垢版 |
2019/02/24(日) 15:29:30.62ID:???
>>681
横だけど上の世代はWHERE句に結合を書いてたの?
0792NAME IS NULL
垢版 |
2019/02/24(日) 15:40:30.55ID:???
いわゆる結合条件のことだろう。
θ結合は直積から選択するのと等価なんでSQL89まではそういう風に表現してた。
0793NAME IS NULL
垢版 |
2019/02/24(日) 16:01:11.52ID:???
Oracleに限って言えばシステム内部で組み込まれてるビューは
今でもWHERE句の結合だけじゃないかと思えるレベル
0794NAME IS NULL
垢版 |
2019/02/24(日) 18:37:09.51ID:SaGWUbss
>>791
ちゃんと製品のマニュアルを見たことがあるのか?

SQLの歴史上、結合条件はWHERE句に書き、FROM句には書けなかった。
0795NAME IS NULL
垢版 |
2019/02/24(日) 18:58:58.79ID:???
>>794
マニュアルなんてあるんだ
見たことないよ
0797NAME IS NULL
垢版 |
2019/02/24(日) 19:00:52.96ID:???
>>794
勉強んなるわ
でもFROMに書けるんだから今はWHERE句に書く必要もうないってことだよね?
0798NAME IS NULL
垢版 |
2019/02/24(日) 19:03:50.83ID:???
最初に現場でoracleを習って
そこでは(+)が多用されていた
その後外部結合というのを習ったけど
join句、いまだに使い方慣れなくて困る
0799NAME IS NULL
垢版 |
2019/02/24(日) 19:06:24.07ID:???
へぇー
じゃあぶっちゃけ今はJOINから入っちゃった方が無駄がないのかな?
0800NAME IS NULL
垢版 |
2019/02/24(日) 20:40:22.59ID:???
初心者はまずJOINだけを覚えた方が良いと思う
0802NAME IS NULL
垢版 |
2019/03/10(日) 11:15:16.36ID:Q3ybtzHt
社員テーブルに以下の5カラムがあります。すべてnot nullカラム。
社員id(主キー)、氏名、所属部署、入社年度、生年月日
社員idはランダムで採番されます。

このとき、
所属部署ごとに以下を満たす1人の氏名と生年月日を抽出するとき、
どのようなSQLが考えられますか?
・入社年度が最も過去
・それが複数人居る場合は、その中で社員idが最大の社員

お力添えよろしくお願い致します。
0803NAME IS NULL
垢版 |
2019/03/10(日) 11:25:40.65ID:???
FROM 社員テーブル T1
WHERE NOT EXISTS (
SELECT * FROM 社員テーブル T2
WHERE T2.所属部署 = T1.所属部署
AND (
T2.入社年度 < T1.入社年度
OR T2.入社年度 = T1.入社年度 AND T2.id > T1.id
))
0805802
垢版 |
2019/03/10(日) 12:06:30.08ID:Q3ybtzHt
803さんのはまだ試してないですが、
group byとhavingで2回絞るのは無理ですかね?
0806NAME IS NULL
垢版 |
2019/03/10(日) 13:00:21.03ID:???
>>802
つかってるDBMSかけ

SELECT * FROM(
SELECT
ROW_NUMBER() OVER( PARTITION BY 所属部署 ORDER BY 入社年度,社員id DESC) as 順位,
*
FROM 社員テーブル
) t
where t.順位=1


ウィンドウ関数使えないようなら、サブクエリ3段とかで出来そうだが
0807802
垢版 |
2019/03/10(日) 13:27:49.35ID:???
>>806
ありがとうございます、勉強になりました。
SQL serverです。
0808NAME IS NULL
垢版 |
2019/03/10(日) 13:47:03.15ID:???
MySQLで

select max(`社員id`),`氏名`,`所属部署`,`入社年度`,`生年月日`
from `社員テーブル`
where (`所属部署`,`入社年度`) in
(select `所属部署`,min(`入社年度`) from `社員テーブル`
group by `所属部署`)
group by `所属部署`;
0809NAME IS NULL
垢版 |
2019/03/10(日) 16:06:47.18ID:???
>>806
Row_Number wwwwwwwwwwww
0810NAME IS NULL
垢版 |
2019/03/10(日) 16:08:11.04ID:???
>>806
そういう使いもんならないの教えんのやめ
0811NAME IS NULL
垢版 |
2019/03/10(日) 21:01:07.81ID:g5zHpNPp
これから仕事で必要になるためSQL勉強しています。
皆さんはどうやって勉強していますか?

現在SQLBoltってサイトで勉強しています。
覚えが遅いためなかなか覚えられません。
一応ExcelのVBAはできます。
勉強法がわからないのでAccess VBA Standardの資格で勉強した方がいいでしょうか?
0812NAME IS NULL
垢版 |
2019/03/10(日) 21:45:35.27ID:???
プログラム言語と違って、何か適当な例題があるわけじゃないし、
割と実践的に体で覚える感じでした
SQLを使用するソフトによって多少、あるいは大きく違ったりするので
SQLをどういう所で使いたいか、ソフトに何を使うかを見極めて学習すると
効果的かも知れません
それから、SQL言語はVBAとは異なるものです
0814NAME IS NULL
垢版 |
2019/03/10(日) 21:52:55.29ID:???
>>812
使いものになるまでの所要期間だいたいどれくらい?
0815NAME IS NULL
垢版 |
2019/03/10(日) 21:59:42.65ID:???
命がけで取り組めば半年もあればなんとかなります
0816NAME IS NULL
垢版 |
2019/03/10(日) 22:06:53.55ID:???
>>815
すみません横から失礼いたします。
業務上必要に迫られ勉強することになりました。
環境は会社で用意されてますが前任者が居なくなってしまう為、ゼロから始めて1ヶ月半でモノにしろと言われています。
命がけで半年ですか…胃が痛くなってきました。
1ヶ月半など無茶苦茶な要求と言えそうですね(泣)
ちなみにエンジニアさんですか?当方非エンジニアです。
0817NAME IS NULL
垢版 |
2019/03/10(日) 22:10:58.93ID:???
複雑さの程度にもよりますから
簡単なものでしたら、1か月も掛からずに習得は出来るでしょう
担当する業務の内容次第です
0818NAME IS NULL
垢版 |
2019/03/10(日) 22:19:54.37ID:???
>>817
レスありがとうございます。
段階にもよりますね。
予定されているものを見たところサブクエリ5〜7つ、最後で結合するという説明でした。
かなり長くこんなの書けるのだろうかと気が遠のきました。
テーブルの挿入などはなさそうです。
0819NAME IS NULL
垢版 |
2019/03/10(日) 23:06:33.52ID:g5zHpNPp
>>812
私はあまり覚えがよいほうじゃないので、業務が始まる前に
勉強して基本的な知識をつける予定でしたが、
やはり実務をこなして体で覚えるほうが早いのですね。
レスありがとうございます。

>>813
レスありがとうございます。
ゲーム会社で簡単なデバック作業をしています。

SQL覚えるのに半年もかかるのですね。
皆様色々教えてくれてありがとうございます。
0820NAME IS NULL
垢版 |
2019/03/10(日) 23:10:57.13ID:???
>>819
818です。横から質問奪ってたいへん失礼しました。
ちょうど同じような境遇でしたもので。
思ったよりもSQLを身につけるのは時間がかかりそうで覚悟せねばと思いました。
お互い頑張りましょう。
0821NAME IS NULL
垢版 |
2019/03/10(日) 23:31:28.45ID:g5zHpNPp
>>820
いえいえ失礼なんて、とんでもないです。
私もSQLを覚えるのがこんなに時間がかかるとは思いませんでした。
大変だと思いますが、お互い頑張りましょう。
0822NAME IS NULL
垢版 |
2019/03/10(日) 23:50:17.33ID:???
>>811
仕事で必要になるならその仕事で使うDBMS使えばいいと思うが
大抵のDBMSは無償版提供してるし
0823NAME IS NULL
垢版 |
2019/03/11(月) 00:01:23.59ID:???
このスレの先頭、>>3-10辺りをすらすらと書けるようになれば
大体の業務はこなせるんじゃないかな?w
0824NAME IS NULL
垢版 |
2019/03/11(月) 00:03:27.75ID:???
分からなくなったらここで聞いてみると良いですが、
その際に、ソフトに何を使っているかを書いて欲しいです
ソフトによって使えたり使えなかったりするものがあります
0825802
垢版 |
2019/03/11(月) 01:04:25.55ID:D8ZFjyx6
Sybase ASEだとOLAP関数サポートなく、
806さんのムリでした

一番エレガントだと思ったのに
0826NAME IS NULL
垢版 |
2019/03/11(月) 03:02:21.27ID:???
初心者の質問続きとなっているようですみませんがお願いします
「SQLの基本構文を書くことができる」というとどういった範囲になりますか?
0827802
垢版 |
2019/03/11(月) 03:57:23.23ID:wSBvFW/D
>>803
望んだ結果が出ました。
ありがとうございました。

社員テーブルに該当するものが複数テーブルから構成されたサブクエリだとかなり重くなりました。
0828NAME IS NULL
垢版 |
2019/03/11(月) 11:49:18.57ID:???
Select文のasに( )を使いたいのですが、どうかけばいいでか?
0829NAME IS NULL
垢版 |
2019/03/11(月) 12:26:03.33ID:???
ダブルクォートで括るのが普通だが
角括弧やバッククォートを使うDBMSもある
0830NAME IS NULL
垢版 |
2019/03/11(月) 13:16:00.18ID:???
>>828
そういったあんた個人のわがままが通ったとして、
で、ユーザー(つまり結果)に優位性があるのか?
0831NAME IS NULL
垢版 |
2019/03/11(月) 13:27:39.34ID:???
>>829
レスありがとうございます。
使ってるのはpostgresqlてすが、" ではダメみたいです。

>>830
As 時間 としていたところ、ユーザーから 時間(分) と表示して欲しいとの要望かありました。
()は特殊な文字てあることは理解していますが、何らかの策があるのではと質問したのですが。あまりに非常識なようでしたら諦めます。
0832NAME IS NULL
垢版 |
2019/03/11(月) 14:38:08.55ID:???
postgresなら"でいいはず
なんらかのプログラミング言語を介して使っているなら
そのプログラミング言語に対して"をエスケープしなければならない
0833NAME IS NULL
垢版 |
2019/03/11(月) 15:02:14.67ID:???
>>832
すみません、アホなことしてました。
時間"("分")" って…
"時間(分)"でokでした。
0834NAME IS NULL
垢版 |
2019/03/12(火) 15:55:28.54ID:wb2Tlo5B
まもなく日本から世界経済が崩壊し、世界教師マYトレーヤとUFOが出てくる。
それからベーシックインカムがはじまるので、20年間ヒキコモリの人でも死にはしない。
むしろ、心配するなら被曝のほう。

【メルトダウンA級戦犯】 『非常用発電機』安倍が放置  『非常用空冷回路』小泉が撤去  死刑求刑
https://rosie.5ch.net/test/read.cgi/liveplus/1552357792/l50
0835NAME IS NULL
垢版 |
2019/03/20(水) 08:25:55.58ID:???
ロジックどこまでSQLにするのが正解?
0836NAME IS NULL
垢版 |
2019/03/20(水) 08:52:06.23ID:IPQHQif1
>>835
できるだけSQLには詰め込まない。
0837NAME IS NULL
垢版 |
2019/03/23(土) 10:38:46.25ID:???
何個までテーブル結合する?
0838NAME IS NULL
垢版 |
2019/03/23(土) 10:48:20.01ID:???
>>837
必要なだけ
経験としては10個ぐらいまでやったことある
0839NAME IS NULL
垢版 |
2019/04/06(土) 16:59:18.80ID:???
テーブル
No1 No2 No3 No4 No5 No6 No7 No8
data1 A B A A A C B A
data2 A A A A A A B B
data3 C C C A B A A A
data4 A A C C A B A B
data5 A A B A A B B A
data6 A C C A C C A A

ほしい結果
A B C
data1 5 2 1
data2 6 2 0
data3 4 1 3
data4 4 2 2
data5 5 3 0
data6 4 0 4


横方向にA,B,Cの数をカウントしたいですが、SELECT文のみで実施するとしたらどういったクエリになりますか?
oracle12です。
0840NAME IS NULL
垢版 |
2019/04/06(土) 18:34:14.74ID:zJrZyIQq
>>839
Excelでやれば?
0841NAME IS NULL
垢版 |
2019/04/06(土) 18:34:35.19ID:???
select
No1,
((case No2
when A then 10000
when B then 100
when C then 1
end)
+(case No3 ……)
+……)
from テーブル
0842NAME IS NULL
垢版 |
2019/04/06(土) 20:48:36.77ID:???
>>839
スマホだから試してないけど
(セレクトはselectに置換えてくれ)
セレクト
T.data as data,
sum(case T.NO when 'A' then 1 else 0 end) as A,
sum(case T.NO when 'B' then 1 else 0 end) as B,
sum(case T.NO when 'C' then 1 else 0 end) as C
from (
セレクト data, NO1 as NO from table
union all
セレクト data, NO2 as NO from table
(* 中略 *)
union all
セレクト data, NO8 as NO from table
) T
group by T.data
0843NAME IS NULL
垢版 |
2019/04/06(土) 22:02:53.39ID:???
>>840
>>841
>>842
レスありがとうございます。

>>841
ちょっと理解できませんでした。

>>842
やはり、UNION ALL使うぐらいしかないんですね。
少し調べて全く同じものまではたどり着けました。
NOが200ぐらいあるのですが、テーブルの設計自体を見直したほうがよさそうですね。
0844NAME IS NULL
垢版 |
2019/04/06(土) 23:57:44.63ID:zJrZyIQq
>>843
そもそもその表で管理しようとしているところが天才
0846NAME IS NULL
垢版 |
2019/04/07(日) 11:10:36.22ID:???
>>845
ありがとうございます。
ちょっと調べてみます。

>>844
うん。わかってる。
ほんとはこういったテーブルにしたいのだけど、毎日のレコード数が凄いことになっちゃうなーって。
別に集計されたテーブルを作ることを検討します。

data_ No rank
data1 No1 A
data2 No1 A
data3 No1 C
data4 No1 A
.
.
.
data1 No8 A
data2 No8 B
data3 No8 A
data4 No8 B
data5 No8 A
data6 No8 A
0847NAME IS NULL
垢版 |
2019/04/07(日) 12:44:56.58ID:???
>>846
> 毎日のレコード数が凄いことになっちゃうなーって。
どんなシステムかわからんけど今時そこら辺のPCでも100万レコード程度は普通に扱えるしOracleでそこそこのサーバー入れてりゃ1億件程度でも破綻しないよ
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況