请通过SQL查询帮助我,以获取包含以下各项的客户列表,客户购买金额和手机总金额的表:
我有下表:
1 purchases:
1.1. purchase_id
1.2. user_id
1.3. purchase_date
1.4. price
2 users:
2.1. user_id
2.2. phone
答案 0 :(得分:1)
加入em,并在用户字段上分组。
使用HAVING
,它可以过滤总购买量和2017年及以后的最低购买日期。
SELECT u.user_id, u.phone,
SUM(p.price) AS TotalPurchasePrice
FROM users u
JOIN purchases p ON p.user_id = u.user_id
GROUP BY u.user_id, u.phone
HAVING COUNT(p.purchase_id) > 3
AND MIN(p.purchase_date) >= CAST('2017-01-01' AS DATE)
答案 1 :(得分:1)
总的来说,我怀疑这实际上是您所追求的,但是示例数据和预期结果会使这变得容易得多:
SELECT u.user_id,
u.Phone,
SUM(CASE WHEN p.purchase_date >= '20170101' THEN Price END) AS TotalPrice
FROM users u
JOIN purchases p ON u.user_id = p.user_id
GROUP BY u.user_id,
u.phone
HAVING MIN(p.purchase_date) >= '20170101'
AND COUNT(CASE WHEN p.purchase_date >= '20170101' THEN 1 END) > 3;
答案 2 :(得分:0)
我对sql-server不熟悉,但是在典型的SQL中,您可以执行以下操作。希望这会有所帮助。
[
{
"ID": "1",
"NAME": "Chaviour",
"CATID": "",
"DATE": "2019-03-16 19:39:06",
"MAX(BID)": "7500"
},
{
"ID": "2",
"NAME": "simpleDrop",
"CATID": "",
"DATE": "2019-03-16 19:39:06",
"MAX(BID)": "5000"
},
{
"ID": "3",
"NAME": "Chattash",
"CATID": "Janne",
"DATE": "2019-03-16 20:55:48",
"MAX(BID)": "9000"
}
]
以上查询应同时考虑到您的两个条件。
答案 3 :(得分:0)
我认为最简单的查询是:
SELECT u.user_id, u.Phone, SUM(Price) AS TotalPrice
FROM users u JOIN
purchases p
ON u.user_id = p.user_id
GROUP BY u.user_id, u.phone
HAVING MIN(p.purchase_date) >= '2017-01-01' AND
COUNT(*) > 3;
第一个HAVING
条件检查最早的购买日期是2017年1月1日或之后。第二个检查至少有三个购买。实际上,这是假设users.user_id
是唯一的-但这是一个合理的假设。