我有两个处于一对多关系的表。更具体地说,t1 是订单信息,t2 是这些订单的行项目详细信息。
我正在尝试使用这样的查询:
SELECT COUNT(DISTINCT(t1.id)) order_count,
SUM(t1.order_total) order_total,
SUM(t2.product_price) product_total,
DATE(t1.order_date) order_date
FROM t1
LEFT JOIN t2 ON t1.id = t2.id
GROUP BY t1.order_date
Run Code Online (Sandbox Code Playgroud)
该查询返回 order_count 的正确值。然而,其他值被错误地夸大。据我所知,通过左连接,我添加了额外的行,这就是总和不正确的原因。我只是不知道如何解决它。
任何帮助将不胜感激。
编辑:输出应该是这样的:
日期 | 订单数量 | 累计
我根据回复开发了下面的查询。它正确返回所有值,除了 coupon_total 之外,它每次都返回 0。
SELECT
COUNT(DISTINCT(o.order_number)) order_count,
DATE(o.order_date) order_date,
SUM(o.total_product_total) product_total,
SUM(o.total_shipping) shipping_total,
SUM(o.total_grand_total) grand_total,
o.coupon_total
FROM (
SELECT
DATE(o.order_date) order_date,
o.order_number,
o.total_product_total,
o.total_shipping,
o.total_grand_total,
IF(op.record_type='cpn',SUM(op.price),0) coupon_total
FROM orders o
LEFT JOIN orders_products op ON o.order_number=op.order_number
GROUP BY o.order_number
) o
GROUP BY DATE(o.order_date)
ORDER …Run Code Online (Sandbox Code Playgroud) 是否可以在 Postgres 中执行以下操作:
SELECT column_name FROM information_schema WHERE table_name = 'somereport' AND data_type = 'integer';
SELECT SUM(coulmn_name[0]),SUM(coulmn_name[1]) ,SUM(coulmn_name[3]) FROM somereport;
Run Code Online (Sandbox Code Playgroud)
换句话说,我需要根据特定条件从表中选择一组列,然后对表中的每一列求和。
我知道我可以在循环中执行此操作,因此我可以独立计算每个列,但显然这需要对从信息模式查询返回的每个列进行查询。例如:
FOR r IN select column_name from information_schema where report_view_name = 'somereport' and data_type = 'integer';
LOOP
SELECT SUM(r.column_name) FROM somereport;
END
Run Code Online (Sandbox Code Playgroud) 我已经厌倦了使用上一个问题中类似的部分,但由于我正在查询的表有多行,我似乎无法获得当天的一个最大值。然后我需要将其与上一个问题合并,但这是我需要处理的另一件事......
表格很简单,2列
Date | Peak Power
1/1/2012 10:00:00 | 150.00
1/1/2012 10:12:00 | 120.00
1/1/2012 05:01:00 | 190.00
1/1/2012 01:35:00 | 500.00
1/1/2012 04:54:00 | 250.00
Run Code Online (Sandbox Code Playgroud)
结果
Date | Peak Power each day
1/1/2012 10:00:00 | 500.00
2/1/2012 04:00:00 | 150.00
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很棒。
我有一个名为trades保存货币交易数据的表,其架构如下:
id - uuid
timestamp - timestamp without time zone
price - numeric
Run Code Online (Sandbox Code Playgroud)
我希望能够以构建蜡烛图的方式进行查询。为此,我需要第一个价格、最后一个价格、最高价格和最低价格,并按时间间隔分组。到目前为止我有这个:
CREATE FUNCTION ts_round( timestamptz, INT4 ) RETURNS TIMESTAMPTZ AS $$
SELECT 'epoch'::timestamptz
+ '1 second'::INTERVAL * ( $2 * ( extract( epoch FROM $1 )::INT4 / $2 ) );
$$ LANGUAGE SQL;
SELECT ts_round( timestamp, 300 ) AS interval_timestamp
, max(price) AS max, min(price) AS min
FROM trades
GROUP BY interval_timestamp
ORDER BY interval_timestamp DESC
Run Code Online (Sandbox Code Playgroud)
如何获得这些区间内的 …
sql postgresql aggregate-functions greatest-n-per-group window-functions
我正在尝试通过一个小组加入一个领域。我可以按照我之前的一个问题中的描述在 MySQL 中处理它。但是,我现在迁移到 PostgreSQL,并且建议的解决方案在 PostgreSQL 9.6 中不起作用。根据Django 文档,可以使用此处或此处所述的 StringAgg 。我相信,在较新版本的 PostgreSQL 中,我无法执行以下行:
from django.db.models.sql.aggregates import Aggregate as SQLAggregate
Run Code Online (Sandbox Code Playgroud)
哪个抛出错误:
from django.db.models.sql.aggregates import Aggregate as SQLAggregate
ModuleNotFoundError: No module named 'django.db.models.sql.aggregates'
Run Code Online (Sandbox Code Playgroud)
如何使用StringAgg创建自己的聚合函数?
看来我不需要修改 StringAgg 来计算我需要的东西。我刚刚将其导入为他们的回答中描述的 Exprator :
from django.contrib.postgres.aggregates import StringAgg
Run Code Online (Sandbox Code Playgroud)
并将其与 values() 一起使用以按查询分组。由于字段不是字符串,因此我也必须使用 Cast:
from django.contrib.postgres.aggregates import StringAgg
from django.db.models.functions import Cast
from django.db.models import TextField
query.annotate(
AggregatedType = StringAgg(Cast('Types', TextField()),delimiter=',')
)
Run Code Online (Sandbox Code Playgroud) 桌子 :
a | b
1 | 15
2 | 10
3 | 20
4 | 30
Run Code Online (Sandbox Code Playgroud)
询问:
SELECT AVG(table.b) FROM table ORDER BY table.a ASC LIMIT 3
Run Code Online (Sandbox Code Playgroud)
将返回 18.75 而不是预期的 15。
如何更改查询以获得我的预期结果(AVG有限行的值)?
我想找到每个城市的每个日期的计数,其中我的日期范围由两列 start_date 和 end_date 指定。
假设我创建了一个具有这样值的表。
create table abc (city varchar(30),start_date date , end_date date);
insert into abc values('a','2018-01-01','2018-01-03');
insert into abc values('b','2018-01-02','2018-01-05');
insert into abc values('a','2018-01-03','2018-01-06');
insert into abc values('b','2018-01-03','2018-01-03');
insert into abc values('a','2018-01-02','2018-01-02');
insert into abc values('b','2018-01-02','2018-01-05');
Run Code Online (Sandbox Code Playgroud)
我希望找到每个日期城市 a 和 b 的计数。在这里它应该告诉我这个。
a, 2018-01-01,1
a, 2018-01-02,2
a, 2018-01-03,2
a, 2018-01-04,1
a, 2018-01-05,1
a, 2018-01-06,1
b, 2018-01-02,2
b, 2018-01-03,3
b, 2018-01-04,2
b, 2018-01-05,2
Run Code Online (Sandbox Code Playgroud)
如果这是一个单一的日期,一个团体就会这样做。
任何帮助表示赞赏。
我希望我的查询返回这样结构的结果,其中tags是数组或类似数组:
id | name | tags
1 a [[1, "name1", "color1"], [2, "name2", color2"]]
2 b [[1, "name1", "color1"), (3, "name3", color3"]]
Run Code Online (Sandbox Code Playgroud)
我希望这个查询可以工作,但它给了我一个错误:
SELECT i.id, i.name, array_agg(t.tag_ids, t.tag_names, t.tag_colors) as tags
FROM ITEMS
LEFT OUTER JOIN (
SELECT trm.target_record_id
, array_agg(tag_id) as tag_ids
, array_agg(t.tag_name) as tag_names
, array_agg(t.tag_color) as tag_colors
FROM tags_record_maps trm
INNER JOIN tags t on t.id = trm.tag_id
GROUP BY trm.target_record_id
) t on t.target_record_id = i.id;
Run Code Online (Sandbox Code Playgroud)
错误:
Run Code Online (Sandbox Code Playgroud)PG::UndefinedFunction: ERROR: function array_agg(integer[], character varying[], …
我正在尝试从表中选择一行:
但是当我尝试强制执行第一个约束时遇到了问题。
以下是对整数按预期工作的所有内容:首先,创建如下所示的表:
t1
+----+---------+
| id | content |
+----+---------+
| 1 | a |
| 2 | b |
| 3 | c |
+----+---------+
Run Code Online (Sandbox Code Playgroud)
和
t2
+----+---------+
| id | t1_id |
+----+---------+
| 1 | 1 |
+----+---------+
Run Code Online (Sandbox Code Playgroud)
postgres=# create table t1(id int, content varchar(10), primary key (id));
CREATE TABLE
postgres=# create table t2(id int, t1_id int, foreign key (t1_id) references t1(id));
CREATE TABLE
postgres=# insert into t1 values (1, 'a');
INSERT 0 …Run Code Online (Sandbox Code Playgroud) 我要疯了吗?
from pyspark.sql.functions import *
sum([2,3,2])
Run Code Online (Sandbox Code Playgroud)
给出:
py4j.Py4JException: Method sum([class java.util.ArrayList]) does not exist
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到一个简单的总和?
幕后发生了什么火花让事情变得如此困难?
postgresql ×6
sql ×6
join ×2
mysql ×2
python ×2
apache-spark ×1
arrays ×1
django ×1
dynamic-sql ×1
json ×1
plpgsql ×1
sum ×1
uuid ×1