题目
给定一个交易表和一个用户表,编写一个查询来确定用户是否倾向于向他们的主要地址下订单,而不是其他地址。
注意:返回下订单到他们家庭地址的百分比作为 home_address_percent
。
示例:
输入:
transactions
表:
列名 | 类型 |
---|---|
id | INTEGER |
user_id | INTEGER |
created_at | DATETIME |
shipping_address | VARCHAR |
users
表:
列名 | 类型 |
---|---|
id | INTEGER |
name | VARCHAR |
address | VARCHAR |
示例输出:
home_address_percent | 0.76 |
---|
答案
解题思路
由于结果输出显示是一个百分比0.76,没有用户id,表明需要计算的是一个总体的值,而非求每个用户的百分比。
首先,我们需要确定每个用户的主要地址是什么,然后计算送货地址与主要地址的匹配次数,并最终计算百分比。
答案代码
SELECT
ROUND(
SUM(
CASE
WHEN t.shipping_address = u.address THEN 1
ELSE 0
END
) / COUNT(*),
2
) AS home_address_percent
FROM transactions t
JOIN users u ON t.user_id = u.id;
SUM(CASE WHEN……)
: 这部分计算了每个用户的订单中送货地址与用户地址匹配的次数。COUNT(*)
: 这部分计算了每个用户的订单总数。ROUND(, 2)
: 这将结果四舍五入到两位小数,以获得百分比形式的结果。
更多详细答案可关注公众号查阅。