选择购买次数最多的客户,按日期分组

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;