【发布时间】:2019-09-22 20:17:47
【问题描述】:
我有这个查询,它提供了商品名称、平均价格和特定年份的计数,如下所示。
name Avg_price_2019 count
---------------------------------
X 23.9 234
Y 21.8 59
SQL:
SELECT
AVG(Amount) Avg_price_2019, name
FROM
(SELECT
name, SUM(price_amount) Amount, COUNT(*)
FROM
myTable
WHERE
(To_date("Activity Date", 'mm-dd-yyyy') >= TO_DATE('09/01/2019', 'mm/dd/yyyy'))
AND (To_date("Activity Date", 'mm-dd-yyyy') <= TO_DATE('09/17/2019','mm/dd/yyyy'))
GROUP BY
name)
GROUP BY
name;
我希望它返回更多年,如下所示
name | Avg price 2018 | count | Avg price 2019 | count
对于 2018 年的结果,我需要相同的查询,只是更改年份。
如何在同一个查询中组合这两个选择以产生上述结果?
【问题讨论】:
-
到底为什么要将日期值存储在 VARCHAR 列中?这是一个非常糟糕的主意。
-
您显示的查询不计算平均值。子查询(派生表)为每个名称提供一行,其中包含总量和计数。主要查询再次按名称分组,所以
AVG(Amount)只是Amount,因为一个值(一行)的平均值当然是值本身。话虽如此,您的主要查询毫无意义。 -
附注:您可以使用日期文字,例如
DATE '2019-09-01',因此您不必使用TO_DATE转换字符串。
标签: sql oracle pivot aggregate-functions