标签: aggregate-functions

如何在 mysql 的同一查询中使用 SUM 和 COUNT 并获得准确的结果

我有两个处于一对多关系的表。更具体地说,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)

mysql sql join aggregate-functions

3
推荐指数
1
解决办法
4万
查看次数

从表中选择一组动态列并获取每个列的总和

是否可以在 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)

sql postgresql dynamic-sql plpgsql aggregate-functions

3
推荐指数
1
解决办法
3625
查看次数

查找每天的单个最大值

我已经厌倦了使用上一个问题中类似的部分,但由于我正在查询的表有多行,我似乎无法获得当天的一个最大值。然后我需要将其与上一个问题合并,但这是我需要处理的另一件事......

表格很简单,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)

任何帮助都会很棒。

sql aggregate-functions

3
推荐指数
1
解决办法
7935
查看次数

选择时间间隔内的第一行和最后一行

我有一个名为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

3
推荐指数
1
解决办法
2178
查看次数

如何使用 DjangoORM 在 PostgreSQL 9.6 中使用 StringAgg 聚合函数

我正在尝试通过一个小组加入一个领域。我可以按照我之前的一个问题中的描述在 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)

python django postgresql concatenation aggregate-functions

3
推荐指数
1
解决办法
2294
查看次数

MySQL AVG ... LIMIT 返回总平均值

桌子 :

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有限行的值)?

mysql sql aggregate-functions

3
推荐指数
1
解决办法
603
查看次数

日期范围之间每个日期的汇总计数

我想找到每个城市的每个日期的计数,其中我的日期范围由两列 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)

如果这是一个单一的日期,一个团体就会这样做。

任何帮助表示赞赏。

postgresql aggregate-functions

3
推荐指数
1
解决办法
1363
查看次数

如何将多列分组为单个数组或类似数组?

我希望我的查询返回这样结构的结果,其中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)

错误:

PG::UndefinedFunction: ERROR:  function array_agg(integer[], character varying[], …
Run Code Online (Sandbox Code Playgroud)

sql postgresql json aggregate-functions

3
推荐指数
1
解决办法
4888
查看次数

如何使用左外连接选择最小 UUID?

我正在尝试从表中选择一行:

  1. 有一个最小的 UUID
  2. 未在另一个表中引用

但是当我尝试强制执行第一个约束时遇到了问题。

以下是对整数按预期工作的所有内容:首先,创建如下所示的表:

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)

postgresql uuid join aggregate-functions

3
推荐指数
1
解决办法
1169
查看次数

Spark“sum”命令给出方法 sum([class java.util.ArrayList]) 不存在

我要疯了吗?

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)

我怎样才能得到一个简单的总和?

幕后发生了什么火花让事情变得如此困难?

python arrays sum aggregate-functions apache-spark

3
推荐指数
1
解决办法
2664
查看次数