Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

WHERE 節

SELECT 文にフィルタを適用します。SELECT 文の結果をスライスする方法について説明します。

構文および詳細

select_statement WHERE set_expression

以下は、この指定の説明です。

DeepSee では、必要に応じてタイプが自動的に変換されるため、セット式の代わりに、単一のメンバ式またはタプル式を使用することもできます。

Important:

各セット要素は別のスライサ軸として使用され、(すべての %FILTER 節の) すべてのスライサ軸の結果がいっしょに集約されます。これは軸のたたみ込みのプロセスです (フィルタはクエリ軸と見なされます)。軸のたたみ込みを実行すると、どのスライサ軸にも NULL の結果がないソース・レコードは複数回カウントされます。

軸のたたみ込みでは、キューブの定義での指定に従い、対象としているメジャーの集約メソッドに基づいて値が組み合わされます (ここの例では、%COUNT が追加されます)。

詳細は、"DeepSee 実装ガイド" の付録 “DeepSee クエリ・エンジンの仕組み” にある “軸のたたみ込み” を参照してください。

以下の 2 つの SELECT 文の例を比較します。1 つは WHERE 節を使用した文、もう 1 つは WHERE 節を使用していない文です。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients 
                             Patient Count
1 Cedar Falls                         1,039
2 Centerville                         1,107
3 Cypress                             1,096
4 Elm Heights                         1,093
5 Juniper                             1,150
6 Magnolia                            1,092
7 Pine                                1,157
8 Redwood                             1,125
9 Spruce                              1,141

前のクエリは、各都市の患者数を表示します。一方、以下のクエリを考えてみます。これは、各都市の男性の患者数を示します。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients WHERE gend.male
 
                             Patient Count
1 Cedar Falls                           509
2 Centerville                           569
3 Cypress                               517
4 Elm Heights                           531
5 Juniper                               574
6 Magnolia                              527
7 Pine                                  569
8 Redwood                               553
9 Spruce                                557

WHERE 節に複数の項目がある場合の効果を例示するために、まず以下のクエリを考えてみます。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients WHERE colord.green
 
                             Patient Count
1 Cedar Falls                           137
2 Centerville                           129
3 Cypress                               150
4 Elm Heights                           128
5 Juniper                               126
6 Magnolia                              143
7 Pine                                  155
8 Redwood                               148
9 Spruce                                147

ここで以下のクエリを考えてみます。これは、WHERE 節のセット要素として、gend.malecolord.green の両方を使用しています。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients WHERE {gend.male,colord.green}
 
                             Patient Count
1 Cedar Falls                           646
2 Centerville                           698
3 Cypress                               667
4 Elm Heights                           659
5 Juniper                               700
6 Magnolia                              670
7 Pine                                  724
8 Redwood                               701
9 Spruce                                704

例えば、Cedar Falls の結果を比較すると、このクエリが、男性患者の結果および好きな色が緑である患者の結果を加算していることがわかります。代わりに、好きな色が緑である男性患者の結果を表示するには、以下のように、WHERE 節で、CROSSJOIN とタプル式のいずれかを使用します。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients 
WHERE CROSSJOIN(gend.male,colord.green)
 
                             Patient Count
1 Cedar Falls                            56
2 Centerville                            65
3 Cypress                                80
4 Elm Heights                            59
5 Juniper                                73
6 Magnolia                               74
7 Pine                                   82
8 Redwood                                70
9 Spruce                                 74

以下の例は、WHERE 節でタプル式を使用しています。

SELECT MEASURES.[%COUNT] ON 0, homed.city.MEMBERS ON 1 FROM patients WHERE (gend.male,aged.60)
                             Patient Count
1 Cedar Falls                             3
2 Centerville                             9
3 Cypress                                 7
4 Elm Heights                             1
5 Juniper                                 8
6 Magnolia                                2
7 Pine                                    5
8 Redwood                                 6
9 Spruce                                  3

WHERE 節は、特定のメジャーを表示する方法として使用することもできます。

SELECT gend.gender.MEMBERS ON 0 FROM patients WHERE MEASURES.[avg test score]
                              Female                 Male
All Patients                    74.78                74.46

ただし、メジャー名は表示されません。

WHERE 節をメジャー検索式で使用する場合、この節は、ファクト・テーブルの行のうち、指定された条件を満たした行のみを使用します (メジャー検索式は、インターシステムズによる MDX への拡張機能で、ファクト・テーブル自体のメジャー値を考慮するものです)。

SELECT MEASURES.[%COUNT] ON 0 FROM patients WHERE %SEARCH.&[[MEASURES].[age]<10]
                             Patient Count
                                      1,370

関連項目

"%FILTER 節" を参照してください。

FeedbackOpens in a new tab