如何对此进行正确的SQL查询:

时间:2019-03-17 17:08:28

标签: sql sql-server

请通过SQL查询帮助我,以获取包含以下各项的客户列表,客户购买金额和手机总金额的表:

  1. 首次购买不早于2017年
  2. 自2017年以来,客户进行了3次以上的购买

我有下表:

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

4 个答案:

答案 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是唯一的-但这是一个合理的假设。