このクエリを実行する最良の方法を見つけようとしています。基本的に、システムで 1 回だけ注文した顧客の「ログイン」フィールド (ログイン フィールドは基本的に顧客 ID/キー) のリストを返す必要があります。
私たちのシステムに関するいくつかの背景...
お客様が同じ日に複数回注文した場合は、1 回の注文に相当します。その理由は、複数のベンダーが存在するためです。誰かが注文すると、ショッピング カート システムはその単一の注文を複数の注文に分割します。その注文の一意のベンダーごとに 1 つの注文です。
これが、これまでに思いついた基本的なmysqlクエリです..
SELECT
xcart_orders.login,
COUNT(xcart_orders.login) as c1,
FROM_UNIXTIME(xcart_orders.date, '%Y-%m-%d') as d1
FROM
xcart_orders
WHERE
INSTR(xcart_orders.email, "marketplace") <= 0
GROUP BY
xcart_orders.login,
FROM_UNIXTIME(xcart_orders.date, '%Y-%m-%d')
ORDER BY
xcart_orders.login
ASC
返されるデータのサンプルを次に示します...
login c1 d1
01crouse 1 2007-11-30
022336010 2 2009-06-24
022336010 1 2009-08-28
02emzach 1 2011-08-25
02emzach 1 2011-10-18
これにより、顧客の素晴らしいリスト、日付ごとの一意の注文数が返されます
問題は、この結果セットをグループ化し、この結果セットに一意のレコードが 1 つある顧客のみを返す必要があることです。これを行う方法がよくわかりません。
上記のサンプル結果セットが表示された場合、ログインのリストから 01crouse を返す必要があります。そのログインには 1 つのレコード、1 つの注文しかないため、他のレコードには複数の注文があります。ご理解いただけると幸いです。ご不明な点がございましたら、お気軽にお問い合わせください。
使用上の重要な注意事項
私は使用することをお勧めしました:
HAVING c1 = 1
残念ながら、Having は機能しません。その理由は、c1 が 1 よりも大きくなる可能性があるためです。その結果、1 日あたりの注文数が表示されることを覚えておいてください。したがって、誰かが同じ日に 3 つのベンダーに 1 つの注文を出した場合、その 1 日に 3 つの注文が発生しますが、それは 1 つの注文です。配置 - これらのタイプの人々は、HAVING を使用して除外されます
これが、結果セットをグループ化してカウントする必要がある理由です。たとえば、ログイン フィールドで結果セットに対して別のグループを実行し、ログイン時にカウントを実行します。このカウントで 1 を返すレコードは正確です。問題は、この結果セットをグループ化する方法がわからないことです