postgreSQL 9.4 dbを照会すると、各顧客が以前の注文に基づいて各従業員とどのくらいの頻度で対話しているかを知りたい。 (少なくとも一桁が2つの間で行われたと仮定した場合)複数のCOUNT/GROUP BY文が予期しない結果を返す
CUSTOMER EMPLOYEE INTERACTIONS CUSTOMER_TOTAL
Customer1 EmployeeA 30 50
Customer1 EmployeeB 20 50
Customer2 EmployeeD 6 15
Customer2 EmployeeA 6 15
Customer2 EmployeeC 3 15
...私は、顧客や従業員のすべての組み合わせの結果で別々のレコードを持っている:私の目的は、次の形式でデータを取得することです。
顧客と各従業員(上記の列3を参照)との間に注文数を含む列と、各顧客全体の注文総数(上記の列4を参照)を含む列を含める必要があります。
SELECT customer.name as Customer, employee.name as Employee,
SUM(CASE WHEN orders.employee_id = employee.id AND orders.customer_id = customer.id THEN 1 ELSE 0 END) AS Interactions,
SUM(CASE WHEN orders.customer_id = customer.id THEN 1 ELSE 0 END) AS Customer_Total
FROM tblcustomer customer
JOIN tblorder orders ON orders.customer_id = customer.id
LEFT JOIN tblemployee employee ON employee.id = orders.employee_id
GROUP BY customer.name, employee.name
ORDER BY Customer, Interactions DESC;
次の結果が返されました::予想通り
CUSTOMER EMPLOYEE INTERACTIONS CUSTOMER_TOTAL
Customer1 EmployeeA 30 30
Customer1 EmployeeB 20 20
Customer2 EmployeeD 6 6
Customer2 EmployeeA 6 6
Customer2 EmployeeC 3 3
すべての行/列が最後の列を除いて、表示され
私は、次のクエリを書いています。各顧客の合計発注数ではなく、従業員が一致した発注のみを返しています。どこが間違っていたのですか?
CUSTOMER_TOTAL for Customer1は50であり、Customer2は15である必要がありますか? –
はい、上の例のとおりです。 – Rory