属性によってグループ化された行をカウントする方法は、その属性が特定の日付より前に表示されていない場合ですか?

ブラム

テーブルの注文を想定する

CREATE TABLE Orders (
order_id int(11),
customer_id int(11),
purchase_date datetime
)

次のレポートが必要です。今月より前に注文しなかった顧客の場合、顧客ごとに何件の注文がありましたか。

これが私が現在使用している非常に遅いSQLです:

SELECT count(order_id) num_of_orders, customer_id 
FROM   (SELECT order_id, customer_id
        FROM   orders 
        WHERE  customer_id NOT IN (SELECT DISTINCT customer_id 
                                   FROM   orders 
                                   WHERE  purchase_date < '2019-03-01')) a 
GROUP  BY customer_id;

このクエリを書くためのより速く/より効率的な方法はありますか?

ヨゲシュシャルマ

私はそれを次のように書き直します:

SELECT COUNT(order_id), customer_id
FROM orders o
WHERE NOT EXISTS (SELECT 1 FROM orders o1 WHERE o1.customer_id = o.customer_id AND o1.purchase_date < '2019-03-01')
GROUP BY customer_id;

これにより、orders(customer_id)のインデックスにより、パフォーマンスが向上します

ただし、ordersテーブルにnullforが含まれているcustomer_id場合、NOT INサブクエリはを返しnullます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ