Trips and Users --Hard

Trips表 status是枚舉類型

+----+-----------+-----------+---------+--------------------+----------+
| Id | Client_Id | Driver_Id | City_Id |        Status      |Request_at|
+----+-----------+-----------+---------+--------------------+----------+
| 1  |     1     |    10     |    1    |     completed      |2013-10-01|
| 2  |     2     |    11     |    1    | cancelled_by_driver|2013-10-01|
| 3  |     3     |    12     |    6    |     completed      |2013-10-01|
| 4  |     4     |    13     |    6    | cancelled_by_client|2013-10-01|
| 5  |     1     |    10     |    1    |     completed      |2013-10-02|
| 6  |     2     |    11     |    6    |     completed      |2013-10-02|
| 7  |     3     |    12     |    6    |     completed      |2013-10-02|
| 8  |     2     |    12     |    12   |     completed      |2013-10-03|
| 9  |     3     |    10     |    12   |     completed      |2013-10-03| 
| 10 |     4     |    13     |    12   | cancelled_by_driver|2013-10-03|
+----+-----------+-----------+---------+--------------------+----------+

User表 Role是枚舉類型

+----------+--------+--------+
| Users_Id | Banned |  Role  |
+----------+--------+--------+
|    1     |   No   | client |
|    2     |   Yes  | client |
|    3     |   No   | client |
|    4     |   No   | client |
|    10    |   No   | driver |
|    11    |   No   | driver |
|    12    |   No   | driver |
|    13    |   No   | driver |
+----------+--------+--------+

求出在2013年10月1日到2013年10月3日,未被禁止用戶的訂單取消率

+------------+-------------------+
|     Day    | Cancellation Rate |
+------------+-------------------+
| 2013-10-01 |       0.33        |
| 2013-10-02 |       0.00        |
| 2013-10-03 |       0.50        |
+------------+-------------------+
MySQL:

SQL語句

SELECT Request_at as Day,
round(sum(if (status!='completed',1,0))/count(*),2) CancellationRate
FROM Trips as t, Users as u
WHERE t.Request_at BETWEEN'2013-10-1' AND '2013-10-3'
AND t.Client_Id=u.User_Id
AN Du.Banned='No'
AND u.Role='Client'
GROUP BY t.request_at;

或者(網上的答案)

SELECT Trips.Request_at Day,
       round(sum(if(status != 'completed', 1, 0)) / sum(1), 2) 'Cancellation Rate'
FROM Trips
JOIN Users
  ON Trips.Client_Id = Users.Users_Id
WHERE Users.Banned = 'No' 
  AND Trips.Request_at between '2013-10-01' AND '2013-10-03'   
GROUP BY Trips.Request_at 


round():

SELECT ROUND(column_name,decimals) FROM table_name

參數 描述
column_name 必需。要舍入的字段。
decimals 必需。規定要返回的小數位數。

sum()返回數值列的總額

SELECT SUM(column_name) FROM table_name

count()返回指定匹配函數的值(NULL 不計入)

SELECT COUNT(column_name) FROM table_name

count(*)返回表中所有行數


group by 結合合計函數(例如sum())使用,對一個或多個結果集分組

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章