0

次の値を持つ、あまり正規化されていない MySQL テーブルがあります。

customer_ID | date | score | sale

「購入体験」を採点しているので、前回の採点に基づいて各顧客の合計販売額を確認したいと思います。以前のスコアは気にせず、最後のスコアについてだけです。

私が持っているとしましょう:

customer_ID | date      | score | sale  
a           | yesterday | 3     | 10  
a           | today     | 6     | 35  
b           | today     | 10    | 20  
c           | yesterday | 4     | 5  

スコアが 5 を超える顧客の購入の結果は次のようになります。

num of customers | total sale values  
2                | 65

そのようなクエリを作成する方法のアイデアはありますか?

編集:

私が知りたいのは、顧客が合計で購入に費やした金額ですが、最後のスコアが 5 より大きい顧客だけです。

4

1 に答える 1

1
SELECT  COUNT(DISTINCT aa.customer_ID) `num of customers`,
        SUM(aa.sale) `total sale values `
FROM    table1 aa
        INNER JOIN
        (
            SELECT  a.customer_ID
            FROM    table1  a
                    INNER JOIN
                    (
                        SELECT  customer_ID, max(date) max_date
                        FROM    table1
                        GROUP   BY customer_ID
                    ) b ON a.customer_ID = b.customer_ID AND
                            a.date = b.max_date AND a.score > 5
        ) final ON aa.customer_ID = final.customer_ID

はるかに単純化された、

SELECT  COUNT(DISTINCT c.customer_ID) `num of customers`,
        SUM(c.sale) `total sale values `
FROM    table1  a
        INNER JOIN
        (
            SELECT  customer_ID, max(date) max_date
            FROM    table1
            GROUP   BY customer_ID
        ) b ON a.customer_ID = b.customer_ID AND
                a.date = b.max_date AND a.score > 5
        INNER JOIN table1 c
            ON a.customer_ID = c.customer_ID
于 2013-01-22T14:14:12.017 に答える