問題タブ [sql-standards]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - ジョイン標準SQL準拠のアップデートです
次の標準 SQL は準拠していますか? そうでない場合、なぜですか?
sql - Oracle 11 でデータを照会する方法
例としてデータのクエリに苦労しています
私の願いの結果
結果のルール
- Customer Register_status を使用して、最新のステータスを表示する必要があります
- 日付は、最終ステータスが変更された最初の日付でなければなりません
- Customer_Register_Status が決してない場合、表示はトランザクションの最初の日付を表示する必要があります。
結果を取得するためのクエリの作成方法を教えてください
mysql - 2 つの値の間の SQL 標準
「その間」を使用する場合、SQL標準またはMySQLに違いはありますか。より正確に言うと、SQL Standard では、次のようにします。
に等しいか:
結果はMySQLでも同じですか。
sql - SQL Server - 相関関係のある条件付き集計
バックグラウンド:
元のケースは非常にシンプルでした。収益の高いものから低いものまで、ユーザーごとの現在の合計を計算します。
クエリ:
出力:
特定のウィンドウ関数を使用すると、別の方法で計算できます。
SUM
ここで、windowedを使用して書き直すことができないと仮定しましょう。
列リストCROSS APPLY
の相関サブクエリが好きではなく、2 回使用されるため、使用しました。 SELECT
c3
すべてが正常に機能します。しかし、よく見るc2
とc3
とても似ています。それでは、それらを組み合わせて単純な条件付き集計を使用してみませんか。
残念ながら、それは不可能です。
外部参照を含む集計式に複数の列が指定されています。集計される式に外部参照が含まれる場合、その外部参照は、式で参照される唯一の列である必要があります。
もちろん、別のサブクエリでラップすることを回避できますが、少し「醜い」ものになります。
Postgresql
バージョン。唯一の違いはLATERAL
、代わりにCROSS APPLY
.
それは非常にうまく機能します。
SQLite
/MySQL
バージョン (それが私が好む理由ですLATERAL/CROSS APPLY
):
SQLFiddleDemo-SQLite
SQLFiddleDemo-MySQL
Aggregates with an Outer Referenceを読みました:
制限のソースは
SQL-92
標準にあり、コードベースSQL Server
から継承されています。Sybase
問題は、SQL Server が集計を計算するクエリを特定する必要があることです。
それを回避する方法だけを示す答えは探しません。
質問は次のとおりです。
- 標準のどの部分がそれを禁止または妨害しますか?
- 他の RDBMS では、この種の外部依存関係に問題がないのはなぜですか?
- それらは本来あるべきように拡張
SQL Standard
してSQL Server
動作しますか、SQL Server
それとも完全に (正しく) 実装していませんか?
以下を参考にしていただければ幸いです。
ISO standard
(92以降)- SQL Server 標準のサポート
- それを説明する RDBMS の公式ドキュメント (
SQL Server/Postgresql/Oracle/...
)。
編集:
SQL-92
の概念がないことはわかっていLATERAL
ます。ただし、( のような) サブクエリを使用するバージョンSQLite/MySQL
も機能しません。
編集2:
少し単純化するために、相関サブクエリのみをチェックしてみましょう。
上記のバージョンは で正常に動作しMySQL/SQLite/Postgresql
ます。
SQL Server
エラーが発生します。サブクエリでラップして1つのレベルに「フラット化」すると、次のように機能します。
この質問のポイントは、それをどのようにSQL standard
規制するかです。
google-bigquery - 標準 SQL を使用した BigQuery テーブル デコレータ
標準 SQL を使用したテーブル デコレータの使用に問題があります。ただし、レガシー SQL 構文と同じ概念が機能します。これはバグですか?ここに例があります。
(A) 次のクエリは問題なく動作します
SELECT COUNT(*) FROM [some-project-name:some_dataset.some_table_name@<time1>-<time2>]
(B) 次のクエリは、エラー メッセージを返します。
Error: Table "some-project-name.some_dataset.some_table_name@<time1>-<time2>" cannot include decorator
SELECT COUNT(*) FROM `some-project-name.some_dataset.some_table_name@<time1>-<time2>`
ノート:
- クエリ (A) では、[レガシー SQL を使用] ボックスがオンになっています。
- クエリ (B) では、[レガシー SQL を使用] ボックスがオフになっています。
<time1>
絶対であり、Unix エポックからのミリ秒単位のテーブルの作成時間です。<time2>
ミリ秒単位の現在のタイムスタンプです
アップデート:
Mikhail が指摘したように、この機能は標準 SQL では利用できません。こちらから依頼されました。
string - Google Big Query の末尾から 3 番目の部分文字列
私は標準の sql を使用しており、最後から 3 番目の部分文字列を抽出したいと考えています。
sql - SQL標準にGROUP BYが本当に必要ですか
数年間 SQL を書いた後、関心のある列を配置してからSELECT
、GROUP BY
. なぜそんなことをしなければならないのか、考えずにはいられません。
ユーザーがグループ化する列を特定する必要がある理由は何ですか? に集計関数がありSELECT
、残りの非集計列でグループ化されている場合、SQL エンジンに仮定させることはできませんか?
CASE WHEN
これは、 inが大きい場合に特に役立ち、より簡潔になりますSELECT
。