我有一个带有索引列(有时更改为b)、price和pricedate的表。我想添加列计数,它显示特定月份的工作日数
我尝试了以下代码,但是它显示列价格也应该分组。我试着选择没有价格栏,但在counta栏我得到了每个日期只有1。你知道如何解决这个问题并得到上表所示的结果吗?
select priceindex, price, pricedate ,count(pricedate) as counta --, price
from myDB
and pricedate between date_trunc('month',pricedate) and pricedate + interval '1 day'
group by index, pricedate
4条答案
按热度按时间iq3niunx1#
如果pricedate数据没有重复项,则不需要groupby。如果pricedate有重复的值,那么您确实需要一个group by,但问题是:当您按pricedate分组时,您希望价格发生什么变化,因为同一日期可能有两个不同的价格?例如
在这种情况下,你想要什么价格,4还是6?一个好的答案可能是平均值:
其他选项有min(price)、max(price)等。如果所有的价格都相同,那么min()max()和avg()将返回相同的值>某些数据库有first(),它从数据库认为是“first”的任何行返回值(根据数据库的不同,这可能没有帮助)--编辑——如果您使用count(pricedate)和'groupbypricedate',那么您将只得到1的计数。也许您误解了'between'子句(它用于限制数据,而不是计算日期之间的差异)。尝试
(目前没有分组),看看这是否能给你一个更接近的答案。
k7fdbhmy2#
始终将数据作为纯文本,而不是图像,以便我们都可以复制/粘贴。
我总共花了15分钟重新键入输入数据并重新格式化。
但是,现在我知道了:
您需要的是运行总和:如果是星期一,则为1;如果是周末,则为0。这就是普通的olap,窗口功能,功能。欢迎使用sql-99。。。
来吧。
输入:
实际选择,从上面的输入中选择:
以及结果,包括控制列和结果列:
t9eec4r03#
使用GROUPBY子句时,需要指定select中使用的所有列。那么查询是
您也可以尝试使用distinct子句而不是GROUPBY。
dced5bon4#