訂單表:
orders_id_column | user_id_column | final_status_column
----------------------------------------------------
1 | 4455 | DeliveredStatus
2 | 4455 | DeliveredStatus
3 | 4455 | CanceledStatus
4 | 8888 | CanceledStatus
我想通過 user_id 計算訂單總數和取消訂單的數量,然后計算這兩者之間的系數,得出如下結果:
user_id | total_orders | canceled_orders | cocient
---------------------------------------------------
4455 | 3 | 1 | 0.33
8888 | 1 | 1 | 1.00
我設法創建了前兩列,但不是最后一列:
SELECT
COUNT(order_id) AS total_orders,
SUM(if(orders.final_status = 'DeliveredStatus', 1, 0)) AS canceled_orders
FROM users
GROUP BY user_id;
uj5u.com熱心網友回復:
您可以使用一種簡單的方法:
SELECT
user_id,
COUNT(order_id) AS total_orders,
SUM(CASE WHEN final_status = 'CanceledStatus' THEN 1 ELSE 0 END ) AS
canceled_orders,
SUM(CASE WHEN final_status = 'CanceledStatus' THEN 1 ELSE 0 END ) /COUNT(order_id)
as cocient
FROM users
GROUP BY user_id;
演示:https : //www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/136
uj5u.com熱心網友回復:
您可以只使用子查詢。
然后您可以參考新創建的列,因為外部查詢存在于不同的范圍內(新列現在存在的范圍)。
(從而避免重復任何邏輯,并避免維護 DRY 代碼。)
SELECT
user_id,
total_orders,
cancelled_orders,
cancelled_orders / total_orders
FROM
(
SELECT
user_id,
COUNT(order_id) AS total_orders,
SUM(if(orders.final_status = 'DeliveredStatus', 1, 0)) AS canceled_orders
FROM
users
GROUP BY
user_id
)
AS per_user
請注意,在您的示例中,從 users 表中選擇似乎是一個錯字。看來您應該從訂單表中選擇...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/347002.html
標籤:mysql
上一篇:mySQLjson陣列重新格式化
