さまざまなユーザーからの注文を含むテーブルがあります。各ユーザー (電子メール アドレスで識別) は、任意の数の注文を持つことができます。ユーザーを含む追加のテーブルはありません。単純な OrderData テーブルだけです。私が欲しいものは単純に聞こえます:
- 総ユーザー数
- XYZ ユーザー数
- 非 XYZ ユーザーの数
ここで、1. は 2. と 3. の合計です。「XYZ」ユーザーは、「@xyz.com」で終わる電子メール アドレスによって定義されます。
3 つの列に 3 つの値を返す単一のクエリが必要です。私が現在持っているものは次のとおりです。
SELECT
(
SELECT COUNT(DISTINCT User_EmailAddress)
FROM OrderData
WHERE User_EmailAddress IS NOT NULL
AND RequestTime >= @RequestTimeFrom
AND RequestTime < @RequestTimeTo
) AS [Total Users],
(
SELECT COUNT(DISTINCT User_EmailAddress)
FROM OrderData
WHERE User_EmailAddress IS NOT NULL
AND User_EmailAddress LIKE '%@xyz.com'
AND RequestTime >= @RequestTimeFrom
AND RequestTime < @RequestTimeTo
) AS [XYZUsers],
(
SELECT COUNT(DISTINCT User_EmailAddress)
FROM OrderData
WHERE User_EmailAddress IS NOT NULL
AND User_EmailAddress NOT LIKE '%@xyz.com'
AND RequestTime >= @RequestTimeFrom
AND RequestTime < @RequestTimeTo
) AS [Non-XYZ Users]
正しい結果セットを返します。
Total Users | XYZ Users | Non-XYZ Users
------------+-----------+--------------
123 | 23 | 100
基本的に同じコードで 3 つの同様のクエリを作成する代わりに、このクエリを作成するより良い方法はありますか?