标签: aggregate

同时聚合计数和完整计数

我有一个events这样的表:

create table events
(
    correlation_id char(26) not null,
    user_id        bigint,
    task_id        bigint not null,
    location_id    bigint,
    type           bigint not null,
    created_at     timestamp(6) with time zone not null,
    constraint events_correlation_id_created_at_user_id_unique
        unique (correlation_id, created_at, user_id)
);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE
Run Code Online (Sandbox Code Playgroud)

该表保存正在执行的任务的记录,如下所示:

insert into events (correlation_id, user_id, task_id, location_id, type, created_at)
values  ('01CN4HP4AN0000000000000001', 4, 58, 30, 0, '2018-08-17 18:17:15.348629+00'),
        ('01CN4HP4AN0000000000000001', 4, 58, 30, 1, '2018-08-17 18:17:22.852299+00'),
        ('01CN4HP4AN0000000000000001', 4, 58, 30, 99, '2018-08-17 18:17:25.535593+00'),
        ('01CN4J9SZ80000000000000003', 4, 97, 30, 0, '2018-08-17 18:28:00.104093+00'),
        ('01CN4J9SZ80000000000000003', 4, …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate count

5
推荐指数
1
解决办法
291
查看次数

每个子集的 MAX

我有一张看起来像这样的表:

+---------------------------------------------+
| EVENT_ID | ITEM_ID | PERSON_ID | EVENT_DATE |
+---------------------------------------------+
| 123      | 1       | 2         | 21-AUG-03  |
| 124      | 1       | 3         | 22-AUG-03  |
| 125      | 1       | 45        | 23-AUG-03  |
| 126      | 1       | (null)    | 24-AUG-03  |
| 127      | 2       | 2         | 25-AUG-03  |
| 128      | 2       | 6         | 26-AUG-03  |
| 129      | 2       | 1         | 27-AUG-03  |
+---------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

因此,我需要获取每个 item_id 的最新 (MAX(event_date)) …

oracle aggregate

4
推荐指数
2
解决办法
3715
查看次数

多对多关系

我正在研究图书数据库。除其他外,我有以下两个表(针对问题进行了一些简化):

tblBook: ID, Title
tblPerson: ID, Name
Run Code Online (Sandbox Code Playgroud)

请注意,该tblPerson表包含作者、翻译者和编辑(不仅是作者)。

很明显,这两个表是多对多的关系,所以我也有如下联结表:

tblBookAuthorJunction
tblBookTranslatorJunction
tblBookEditorJunction
Run Code Online (Sandbox Code Playgroud)

但是当涉及到加入表以选择所有角色时,我遇到了一个问题:如何创建一个查询以获得一个看起来像这样的表:

BookTitle AuthorName TranslatorName EditorName
Run Code Online (Sandbox Code Playgroud)

这是可能吗?我的查询应该是什么样的?

编辑:您可以为 RDBMS 假设 SQLite。


更新

到目前为止,有两个包含查询的答案。我想将这些答案与可能会发现此信息有价值的其他人进行比较...请注意,连接表的名称与问题中的名称略有不同。而且,是的,我知道,测试数据很无聊。

答案 1

我自己的回答中的查询如下:

SELECT B.BookTitle, P1.PersonName, P2.PersonName, P3.PersonName
FROM tblBook B
LEFT JOIN tblBookAuthor A ON B.BookID = A.BookID
LEFT JOIN tblPerson P1 ON A.AuthorID = P1.PersonID
LEFT JOIN tblBookTranslator T ON B.BookID = T.BookID
LEFT JOIN tblPerson P2 ON T.TranslatorID = P2.PersonID
LEFT JOIN tblBookEditor E ON B.BookID = E.BookID
LEFT JOIN …
Run Code Online (Sandbox Code Playgroud)

sqlite join aggregate

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

从子行聚合统计信息

我有一个父行,然后有许多子行,我必须汇总这些子行的统计信息。

对于更具体的示例,让我们假设我有一轮高尔夫球(父行),然后是带有每个洞得分的子行。我需要汇总这些行的统计数据,例如小鸟数、标准杆数、转向架数、推杆数等等。然后将这些数字放入一个 round_detail 表中。

什么是最好的解决方案?

如果重要的话,我正在使用 postgres,但这可能只是一个一般的 sql 问题。

编辑:根据要求http://sqlfiddle.com/#!1/6549c

postgresql aggregate

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

带 GROUP BY 的中位数

假设下表t1

==================
| 标签 | 价值 | --+ 为简单起见,val 是非 NULL
==================
| a1 | v1 |
| a1 | v2 |
| a1 | v3 |
| a1 | v4 |
| a1 | v5 |
| a2 | v6 |
| a2 | v7 |
| a2 | v8 |
| a2 | v9 |
| ... | ... |
==================

如果您在 MySQL 中执行以下脚本:

SELECT `tag`, AVG(`val`) FROM `t1` GROUP BY `tag`
Run Code Online (Sandbox Code Playgroud)

您将获得按列分组的平均值tag

================== …

mysql aggregate group-by

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

Influxdb 和 Grafana 结合多个 SELECT

我在 Influx 中有一些网络计数器,我用 Grafana 绘制它们。

我正在尝试组合来自几个以太网接口的统计数据并将它们组合起来以显示总带宽。

这两个单独的查询独立工作,但我不知道如何编写它以将这两者结合起来。

SELECT 8 * non_negative_derivative(mean("value"), 1s ) 
FROM "inoctets" 
WHERE "host" = 'myhost1' AND $timeFilter 
GROUP BY time(1s) fill(null)

SELECT 8 * non_negative_derivative(mean("value"), 1s ) 
FROM "inoctets" 
WHERE "host" = 'myhost4' AND $timeFilter 
GROUP BY time(1s) fill(null)
Run Code Online (Sandbox Code Playgroud)

编辑:FWIW 我正在运行 Influx 1.1.1 和 Grafana 4.1.1

aggregate select

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

正确查找过去 3 个月每个月的最大值

我有一个查询,用于获取过去 3 个月的 ID 数据。我需要调整它,以便我在三个月中的每一个月都获得最高值。我已经用聚合函数 MAX 尝试了几件事,但我一无所获。

我试图获得过去几个月中每个月的最大值......

以下是查询中的数据,目前按日期 (asc) 排序:

ID 日期值
12410 01/03/2017 12:17 0.000178
12410 01/10/2017 11:36 0.000186
12410 01/17/2017 11:27 0.000189
12410 01/24/2017 13:09 0.000182
12410 01/31/2017 10:37 0.000169
12410 02/07/2017 11:03 0.000214
12410 02/14/2017 11:52 0.000176
12410 02/21/2017 10:51 0.000200
12410 02/28/2017 12:29 0.000194
12410 03/07/2017 08:39 0.000206

这是查询:

从 AnalysisValueTbl 中选择 AnalysisID 作为“ID”,AnalysisDateTime 作为“Date”,AnalysisValue 作为“Value”
在哪里
AnalysisID = 12410 和 DatePart(m, AnalysisDateTime) = DatePart(m, DateAdd(m, -3, getdate()))
和 DatePart(yyyy, AnalysisDateTime) = DatePart(yyyy, DateAdd(m,-3, getdate())) …

sql-server-2008 sql-server aggregate max

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

为聚合连接多个表

如何使用 Sum 和 Count 函数连接多个表进行聚合?

我正在尝试的查询如下:

Select
  campaigns.id,
  campaigns.name,
  Count(landers.campaign_id) As landers_count,
  Sum(conversions.revenue) As total_revenue
From
  campaigns Left Join
  conversions
    On campaigns.id = conversions.campaign_id Left Join
  landers
    On campaigns.id = landers.campaign_id
Group By
  campaigns.id
Run Code Online (Sandbox Code Playgroud)

我什至尝试过外部连接,但没有运气,而且我得到的结果不准确。

我的示例表如下:

活动表:

| id | name           |
+----+----------------+
| 1  | Facebook Ads   |
| 2  | Bing Ads       |
| 3  | Direct Mailing |
| 4  | Solo Ads       |
Run Code Online (Sandbox Code Playgroud)

兰德斯表:

| id | name        | campaign_id |
+----+-------------+-------------+
| 1  | Lander …
Run Code Online (Sandbox Code Playgroud)

mysql join aggregate count sum

4
推荐指数
2
解决办法
7420
查看次数

查找给定列的最频繁值

我有一张桌子,我想将其作为如下所述的邀请排行榜。我想创建一个查询来计算给定月份中重复行的数量并以降序排列。

通读一些问题,这个查询似乎有效:

SELECT COUNT(invite_code) AS counted
FROM invite_table
GROUP BY invite_code
ORDER BY counted DESC
LIMIT 10;
Run Code Online (Sandbox Code Playgroud)

但它不考虑月份。我正在寻找的是获得最常出现的user_code在指定月份的地方。此外,对表设计的任何批评都是受欢迎的,因为我故意设计它以便有具有重复值的重复行。我正在尝试跟踪在给定月份中使用最多邀请码的用户,我还有一些代码指示用户来自哪个频道(例如,可能在 FB 中看到广告),这是一个有效的表格设计吗?

表“public.invite_table”
   专栏 | 类型 | 整理 | 可空 | 默认
-------------+--------------+-----------+- ---------+---------
 用户代码 | 性格变化| | 不为空|
 邀请码 | 性格变化| | |
 月 | 字符变化(3) | | 不为空|
 点 | 整数 | | 不为空|
索引:
    "invite_table_pkey" PRIMARY KEY, btree (user_code)
外键约束:
    “invite_table_user_code_fkey”外键(用户代码)参考用户表(用户代码)

postgresql database-design aggregate date

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

加速对时间序列表的查询。获取 (MAX - MIN) 聚合值很慢

如何改进此查询以将下面显示的查询速度从30+ 秒提高到毫秒?我正在使用PostgreSQL: v 9.6.6

语境

我有一个时间序列表buildings.hispoint,用于存储表中数据点的历史数据buildings.point

我需要Max(value) - Min(value) as aggregation_value为大量数据点汇总不同时间范围(例如,年初至今)的数据。

事实证明,这非常缓慢,需要改进。

表结构buildings.hispoint (20,210,129行)

CREATE TABLE buildings.hispoint (
    id int,
    value float,
    datetime timestamp,
    point_id …
    CONSTRAINT foo FOREIGN KEY (point_id)
    REFERENCES buildings.point (point_id),
    …
);
Run Code Online (Sandbox Code Playgroud)

询问

SELECT COUNT(datetime) AS id, 
MAX(value) - MIN(value) AS aggregation_value
FROM buildings_hispoint
WHERE point_id = 44 
AND buildings_hispoint.datetime BETWEEN '2018-01-01 00:00:00' AND '2018-05-02 09:18:14';
Run Code Online (Sandbox Code Playgroud)

查询计划

Aggregate  (cost=160967.11..160967.12 rows=1 width=16) (actual time=21713.720..21713.720 rows=1 …
Run Code Online (Sandbox Code Playgroud)

postgresql performance aggregate postgresql-9.6 time-series-database query-performance

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