我正在尝试获取相同httpclient
的所有音乐的列表,以获得价格的和它在同一天录制的
预期产出:
music_id
我有一张看起来像这样的音乐'
music_id | name | price | created
-----------+--------------+------------------------
1222 | blue | 333 | 2015-07-07
2222 | red | 45 | 2016-07-07
1222 | blue | 111 | 2017-07-07
这是我的疑问:
music_id | name | price | created_at
-----------+--------------+------------------------
1222 | blue | 111 | 2015-07-07 22:42:39
2222 | red | 22.5 | 2016-07-07 22:42:39
1222 | blue | 111 | 2017-07-07 22:42:39
1222 | blue | 111 | 2015-07-07 11:42:39
2222 | red | 22.5 | 2016-07-07 11:42:39
1222 | blue | 111 | 2015-07-07 11:42:39
但我会收到错误,
SELECT music_id, name, SUM(price), TO_DATE(cast(created_at AS text), 'YYYY-MM-DD') AS created FROM music GROUP BY music_id, created;
答案 0 :(得分:1)
您的选择必须包含您的分组列。另外,如果您使用的是group by
postgres
中的列位置
SELECT music_id, name, TO_DATE(cast(created_at AS text), 'YYYY-MM-DD') as created, SUM(price)
FROM music
GROUP BY 1,2,3;
答案 1 :(得分:0)
按date
而不是文字表示分组会更便宜:
SELECT music_id, name, SUM(price) AS created, created_at::date AS created
FROM music
GROUP BY 1, 2, 4;
无论如何, 'YYYY-MM-DD'是日期的默认ISO格式。在投射到to_char()
之后,您仍然可以使用date
强制执行任何所需的格式:to_char(created_at::date, 'YYYY-MM-DD')
- 广告投放只与GROUP BY
同步您将位置参考4
替换为created_at::date
。
在规范化的数据库模式中,您不会在此表中包含功能相关的值name
,只是music_id
(这将是具有所有属性的另一个表的外键)。
然后,查询将按ID和日分组,并在之后的另一个连接中从另一个表中获取更多属性...