首页 > 解决方案 > 如何在查询中添加辅助列?

问题描述

我的表可能如下所示:

|     Email         |     ID    |  Order_date  |    Total     |
| ----------------- | --------- | ------------ | ------------ |
|customerA@gmail.com|     1     | 01-01-2019   |     500      |
|customerB@gmail.com|     2     | 02-01-2019   |    1000      |
|customerC@gmail.com|     3     | 03-01-2019   |    1000      |
|customerD@gmail.com|     4     | 04-01-2019   |    2000      |
|customerA@gmail.com|     5     | 05-01-2019   |    3000      |
|customerB@gmail.com|     6     | 06-01-2019   |    500       |
|customerC@gmail.com|     7     | 03-01-2019   |    1000      |
|customerA@gmail.com|     8     | 05-01-2019   |    3000      |
|customerB@gmail.com|     9     | 09-01-2019   |    2000      |
|customerA@gmail.com|    10     | 10-01-2019   |    4000      |
|customerB@gmail.com|    11     | 02-01-2019   |    1000      |
|customerA@gmail.com|    12     | 12-01-2019   |    2000      |

我想添加一个包含订单数量的辅助列,但没有任何额外的分组。我梦想中的桌子应该是这样的:

|     Email         |     ID    |  Order_date  |   Total      | Number of orders |
| ----------------- | --------- | ------------ | ------------ | ---------------- |
|customerA@gmail.com|     1     | 01-01-2019   |     500      |      5           |
|customerB@gmail.com|     2     | 02-01-2019   |    1000      |      4           |
|customerC@gmail.com|     3     | 03-01-2019   |    1000      |      2           |
|customerD@gmail.com|     4     | 04-01-2019   |    2000      |      1           |
|customerA@gmail.com|     5     | 05-01-2019   |    3000      |      5           |
|customerB@gmail.com|     6     | 06-01-2019   |    500       |      4           |
|customerC@gmail.com|     7     | 03-01-2019   |    1000      |      2           |
|customerA@gmail.com|     8     | 05-01-2019   |    3000      |      5           |
|customerB@gmail.com|     9     | 09-01-2019   |    2000      |      4           |
|customerA@gmail.com|    10     | 10-01-2019   |    4000      |      5           |
|customerB@gmail.com|    11     | 02-01-2019   |    1000      |      4           |
|customerA@gmail.com|    12     | 12-01-2019   |    2000      |      5           |

正如您可能猜到的那样,我想根据购物订单的数量进行进一步的计算(如总和或平均值)。我的 SQL 查询可能如下所示:

SELECT AVG(Total)
FROM
(SELECT ...
...
...
WHERE ...
...
...
GROUP BY ...
HAVING COUNT(Number_of_orders > 1) AND COUNT(Number_of_orders < 5) x

或类似的东西。只是为了给你一个基本的想法,为什么我认为我需要辅助列。

我原以为这很容易,但我已经花了很多时间在上面,所以任何形式的建议或帮助都将不胜感激!

标签: sqlsoql

解决方案


假设“电子邮件”是您要按订单数量分组的列,这应该会为您提供所需的表格。

SELECT T.Email, T.ID, T.Date, T.Total, TT.Count
FROM Table T
INNER JOIN (
   SELECT Email, Count(Email) as Count
   FROM Table
   GROUP BY Email) TT 
ON T.Email = TT.Email

推荐阅读