选择购买次数最多的客户,按日期分组
Selecting the customer who made the most purchases, grouped by date
我有两张桌子
customers
+---------+-------+
| cust_id | name |
+---------+-------+
| 1 | Tom |
+---------+-------+
| 2 | John |
+---------+-------+
| 3 | Lisa |
+---------+-------+
| 4 | Wendy |
+---------+-------+
purchases
+---------------+-------------+---------+
| purchase_date | purchase_id | cust_id |
+---------------+-------------+---------+
| 2021-01-01 | 1 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 2 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 3 | 2 |
+---------------+-------------+---------+
| 2021-01-01 | 4 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 5 | 4 |
+---------------+-------------+---------+
| 2021-01-02 | 6 | 3 |
+---------------+-------------+---------+
| 2021-01-02 | 7 | 3 |
+---------------+-------------+---------+
| 2021-01-02 | 8 | 2 |
+---------------+-------------+---------+
| 2021-01-02 | 9 | 1 |
+---------------+-------------+---------+
| 2021-01-02 | 10 | 4 |
+---------------+-------------+---------+
| 2021-01-03 | 11 | 2 |
+---------------+-------------+---------+
| 2021-01-03 | 12 | 2 |
+---------------+-------------+---------+
| 2021-01-03 | 13 | 3 |
+---------------+-------------+---------+
| 2021-01-03 | 14 | 3 |
+---------------+-------------+---------+
我想按日期查询唯一购买客户的数量(简单)以及按日期进行最多购买的客户的 cust_id
。如果不止一个客户在同一天进行了相同数量的购买,我想显示较小的cust_id
。结果应如下所示:
+---------------+------------------+-----------------+
| purchase_date | unique_customers | biggest_spender |
+---------------+------------------+-----------------+
| 2021-01-01 | 3 | 1 |
+---------------+------------------+-----------------+
| 2021-01-02 | 4 | 3 |
+---------------+------------------+-----------------+
| 2021-01-03 | 2 | 2 |
+---------------+------------------+-----------------+
这是 Postgresql 中的查询,使用 mode()
确定最大的支出者,别名是您购买每个日期的最频繁值 table
SELECT p.purchase_date, count(DISTINCT p.cust_id) as unique_customers , mode() within group (order by p.cust_id) as biggest_spender
FROM purchases p
GROUP BY p.purchase_date
ORDER BY COUNT(p.cust_id) DESC;
我有两张桌子
customers
+---------+-------+
| cust_id | name |
+---------+-------+
| 1 | Tom |
+---------+-------+
| 2 | John |
+---------+-------+
| 3 | Lisa |
+---------+-------+
| 4 | Wendy |
+---------+-------+
purchases
+---------------+-------------+---------+
| purchase_date | purchase_id | cust_id |
+---------------+-------------+---------+
| 2021-01-01 | 1 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 2 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 3 | 2 |
+---------------+-------------+---------+
| 2021-01-01 | 4 | 1 |
+---------------+-------------+---------+
| 2021-01-01 | 5 | 4 |
+---------------+-------------+---------+
| 2021-01-02 | 6 | 3 |
+---------------+-------------+---------+
| 2021-01-02 | 7 | 3 |
+---------------+-------------+---------+
| 2021-01-02 | 8 | 2 |
+---------------+-------------+---------+
| 2021-01-02 | 9 | 1 |
+---------------+-------------+---------+
| 2021-01-02 | 10 | 4 |
+---------------+-------------+---------+
| 2021-01-03 | 11 | 2 |
+---------------+-------------+---------+
| 2021-01-03 | 12 | 2 |
+---------------+-------------+---------+
| 2021-01-03 | 13 | 3 |
+---------------+-------------+---------+
| 2021-01-03 | 14 | 3 |
+---------------+-------------+---------+
我想按日期查询唯一购买客户的数量(简单)以及按日期进行最多购买的客户的 cust_id
。如果不止一个客户在同一天进行了相同数量的购买,我想显示较小的cust_id
。结果应如下所示:
+---------------+------------------+-----------------+
| purchase_date | unique_customers | biggest_spender |
+---------------+------------------+-----------------+
| 2021-01-01 | 3 | 1 |
+---------------+------------------+-----------------+
| 2021-01-02 | 4 | 3 |
+---------------+------------------+-----------------+
| 2021-01-03 | 2 | 2 |
+---------------+------------------+-----------------+
这是 Postgresql 中的查询,使用 mode()
确定最大的支出者,别名是您购买每个日期的最频繁值 table
SELECT p.purchase_date, count(DISTINCT p.cust_id) as unique_customers , mode() within group (order by p.cust_id) as biggest_spender
FROM purchases p
GROUP BY p.purchase_date
ORDER BY COUNT(p.cust_id) DESC;