假设我有一个这样的搜索查询:
SELECT COUNT(id), date(created_at)
FROM entries
WHERE date(created_at) >= date(current_date - interval '1 week')
GROUP BY date(created_at)
Run Code Online (Sandbox Code Playgroud)
如您所知,例如我得到的结果如下:
count | date
2 | 15.01.2014
1 | 13.01.2014
9 | 09.01.2014
Run Code Online (Sandbox Code Playgroud)
但我没有得到一周中没有创建条目的日子。
如何获得如下所示的搜索结果,包括没有创建条目的日期?
count | date
2 | 15.01.2014
0 | 14.01.2014
1 | 13.01.2014
0 | 12.01.2014
0 | 11.01.2014
0 | 10.01.2014
9 | 09.01.2014
Run Code Online (Sandbox Code Playgroud) 假设您需要numranges按左边界降序对数组进行排序。下面的做法是最简单的:将unnest数组放入表中,对表进行排序,然后array_agg将其放回到数组中。这在代码中看起来怎么样?这是我的非工作尝试:
DO $$
DECLARE
x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN
x := (
WITH x AS (
SELECT xrow FROM unnest(x) AS xrow
)
SELECT array_agg(xrow) FROM x ORDER BY lower(xrow) DESC
);
RAISE NOTICE '%', x;
END;
$$;
Run Code Online (Sandbox Code Playgroud) 我有一个大 DataFrame (df),如下所示:
Acc_num date_diff 0 29 0:04:43 1 29 0:01:43 2 29 2:22:45 3 29 0:16:21 4月29日 0:58:20 5 30 0:00:35 6 34 7:15:26 7 34 4:40:01 8 34 0:56:02 9 34 6:53:44 10 34 1:36:58 …… Acc_num int64 date_diff timedelta64[ns] 数据类型:对象
我需要计算每个帐号的“date_diff”平均值(以 timedelta 格式)。
df.date_diff.mean()工作正常。但是当我尝试下一步时:
df.groupby('Acc_num').date_diff.mean()它引发了一个异常:
“数据错误:没有要聚合的数字类型”
我也尝试过df.pivot_table()方法,但没有取得任何成果。
有人可以帮我解决这个问题吗?先感谢您!
我需要编写一个动态返回列的查询。例如,我有一个包含列的表 tblTest:
Id, Name, Type, Amount
1, Receipt, Cash 100
2, Receipt, Card 200
3, Receipt, Cheque 250
4, Receipt, Card 150
5, Receipt, Cash 100
6, Payment, Cash 300
7, Payment, Cheque 400
Run Code Online (Sandbox Code Playgroud)
SQL查询:
SELECT
Name,
SUM(CASE WHEN Type = 'Cash' THEN Amount ELSE 0 END) Cash,
SUM(CASE WHEN Type = 'Card' THEN Amount ELSE 0 END) Card,
SUM(CASE WHEN Type = 'Cheque' THEN Amount ELSE 0 END) Cheque
FROM tblTest
GROUP BY
Name;
Run Code Online (Sandbox Code Playgroud)
它返回我,
上面的结果是按照我的要求,但在我的情况下,上面数据中的类型现金、卡、支票等不是预定义的,它们可能是动态出现的,那么我如何管理它,请帮助我为此构建动态列 SQL。
提前致谢..
到目前为止,我在这方面花了几个小时,我使用的是 aws athena,但没有取得任何进展,我认为我缺少一些东西:
所以我有一张这样的桌子
------------------------------------------------------------------
caseid | postcode | streetname | state | dateandtime
-----------------------------------------------------------------
123123 | 4000 | arthur | QLD | 2018-09-30 10:32:51.000
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
现在这个表将有多个重复的 caseid,我想按日期和时间获取最新的 caseid,我发现我可以执行以下操作:
SELECT b.caseid, MAX(b.dateandtime) as dateandtime
FROM jsonmanual b
GROUP BY b.caseid
Run Code Online (Sandbox Code Playgroud)
这按我想要的方式工作。
现在,我需要使用日期和时间上的 Between 语句来过滤这些结果,并从这些我无法做到的唯一条目中获取邮政编码/街道名称/州的计数,下面是我当前的主要猜测,以显示邮政编码/街道名称/州的计数两个时间戳之间的邮政编码:
SELECT a.postcode, count(a.postcode) as countof
FROM jsonmanual a
INNER JOIN (
SELECT distinct b.caseid, MAX(b.dateandtime) as dateandtime, b.postcode
FROM jsonmanual b
GROUP BY b.caseid, b.postcode
) b ON a.caseid = b.caseid and a.postcode = b.postcode
where …Run Code Online (Sandbox Code Playgroud) sql aggregate-functions greatest-n-per-group presto amazon-athena
我有以下代码,使用 group by withEmployee_id和aggregation with来查找每个员工的总销售额和唯一销售额Customer_id。
Sales.groupby('Employee_id').agg({
'Customer_id': [
('total_sales', 'count'),
('unique_sales', 'nunique')
]})
Run Code Online (Sandbox Code Playgroud)
重要的是要知道我还将与其他列执行聚合,但到目前为止这就是我所写的全部内容。因此,如果您有建议的解决方案,我请您考虑一下,以免产生影响。
虽然这在计算每个员工的总销售额和唯一销售额以及创建两列方面正是我想要的,但它会创建嵌套列名称。因此,列名称看起来像 [('Customer_id', 'total_sales'), ('Customer_id', 'unique_sales')],这是我不想要的。有没有什么方法可以轻松摆脱嵌套部分,只包含 ['total_sales', 'unique_sales'],或者是在我完成所有操作后重命名列是最简单的方法?
谢谢!
我有一个包含数值和 NaN 的表。求和时,如果所选值包含 NaN,则结果将为 NaN。有没有办法让postgresql在求和时将它们视为0而不是NaN?或者我只需将表中的所有 NaN 转换为 0 或 Null?
我正在尝试按 ward_name 进行分组,这是我唯一需要分组的内容,但我收到此错误:
\ #1055 - SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含非聚合列“osunemonitor.r.entry_date”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容
在我的查询中,如何使其仅分组ward_name?
我的查询:
SELECT
pu.pu_ward_name,
entry_date,
pu.o_code,
pu.pu_ward_name,
pu.pu_lga_name,
pu.pu_code,
pu.pu_ward_code,
pu.pu_lga_code,
pu.pu_voters_reg_count,
SUM(total_vote_cast) AS total_vote_cast,
SUM(apc_total_vote) AS apc_total_vote,
SUM(pdp_total_vote) AS pdp_total_vote,
SUM(adp) AS adp, ward_name
FROM
post_election_info r
LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name
WHERE lga_name = 'BORIPE'
GROUP BY
pu.pu_ward_name
Run Code Online (Sandbox Code Playgroud) 我的数据库中有两列,一列是 uid (myuid),另一列是代表每个用户宠物总数的键值对 (totalpetsjson)。我想查询 uid,然后对键匹配的结果 JSON 行求和。
这个查询
SELECT totalpetsjson FROM mytable WHERE "myuid" IN ('john','andy')
Run Code Online (Sandbox Code Playgroud)
结果分为两行
{'dogs':3,'cats':5,'fish':144}
{'dogs':2,'lizards':4,'cats':3'}
Run Code Online (Sandbox Code Playgroud)
我想要的结果是什么。我如何查询并组合上面两行,如下所示?
{'dogs':5,'cats':8,'fish':144,'lizards':4}
Run Code Online (Sandbox Code Playgroud) 通过此选择:
json_agg(json_build_object("id", price::money))
Run Code Online (Sandbox Code Playgroud)
我得到的结果值:
[
{"6" : "$475.00"},
{"6" : "$1,900.00"},
{"3" : "$3,110.00"},
{"3" : "$3,110.00"}
]
Run Code Online (Sandbox Code Playgroud)
我想要这种格式的数据:
{
"6": ["$475.00","$1,900.00"],
"3": ["$3,110.00","$3,110.00"]
}
Run Code Online (Sandbox Code Playgroud)
当在服务器上查询或与 jsonb 一起使用时,ID 是重复的,并且只有一个键值对能够通过。