我有下表称为sample_events:
Column | Type
--------+-----
title | text
date | date
Run Code Online (Sandbox Code Playgroud)
具有值:
title | date
-------+------------
ev1 | 2017-01-01
ev2 | 2017-01-03
ev3 | 2017-01-02
ev4 | 2017-12-10
ev5 | 2017-12-11
ev6 | 2017-07-28
Run Code Online (Sandbox Code Playgroud)
为了创建一个包含每个唯一年份每月事件数的数据透视表,我使用了以下形式的交叉表函数crosstab(text source_sql, text category_sql):
SELECT * FROM crosstab (
'SELECT extract(year from date) AS year,
extract(month from date) AS month, count(*)
FROM sample_events
GROUP BY year, month'
,
'SELECT * FROM generate_series(1, 12)'
) AS (
year int, jan int, feb int, …Run Code Online (Sandbox Code Playgroud) 我有一个 PostgreSQL 9.6 数据库,其中有一个根据 EAV 模型设计的表,其中包含不同类型的值。示例摘录如下所示:
name |arrivalTime | boolValue | intValue | floatValue | stringValue
------+------------+-----------+----------+------------+------------
a1 | 10:00:00 | true | | |
c3 | 10:00:00 | | 12 | |
d4 | 10:00:00 | | | | hello
e5 | 15:00:00 | | | 45.67 |
c3 | 15:00:00 | | 45 | |
b2 | 20:00:00 | | | 4.567 |
a1 | 20:00:00 | false | | |
d4 | 22:00:00 | | | …Run Code Online (Sandbox Code Playgroud) 我有一个名为 antest 的示例表,如下所示,用于测试交叉表函数。
create table antest(student text, subject text, result numeric);
insert into antest(student, subject, result) values
('peter','music',2.0),
('peter','language',2.0),
('gabriel','history',8.0),
('john','history',9.0),
('john','maths',4.0),
('john','music',7.0);
student|subject|result
-------+-------+------
peter |music |2.0
peter |lanuage|2.0
gabriel|history|8.0
john |history|9.0
john |maths |4.0
john |music |7.0
Run Code Online (Sandbox Code Playgroud)
想要的结果:
student|music|language|history|maths
-------+-----+--------+-------+-----
peter |2.0 |2.0 | |
gabriel| | |8.0 |
john |7.0 | |9.0 |4.0
Run Code Online (Sandbox Code Playgroud)
我已经为此执行了以下查询:
select *
from public.crosstab (
'select student, subject, result from antest',
'select distinct subject from antest'
) as final_result(student text, music numeric, maths …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个交叉表,其中行=月,列=天(即1、2、3、4...31)。
Month | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 ...
------+------+------+-----+-----+-----+-----+-----+-----+-----+-----+------+------
9 | 1000 | 1500 | | | | | 500 | | | | 1500 | 2000
8 | 1000 | | | | | | | | | | |
Run Code Online (Sandbox Code Playgroud)
我的查询如下:
SELECT * FROM crosstab(
$$
SELECT
extract(month from created_at) AS themonth,
extract(day from created_at) AS theday,
COUNT(*)
FROM public.users …Run Code Online (Sandbox Code Playgroud) 我有一个 pyspark 数据框,如下图所示:
即我有四列:年份、单词、计数、频率。年份为2000年至2015年。
我想对(pyspark)数据框进行一些操作,以便我得到如下图所示格式的结果:
新的数据框列应为:word、Frequency_2000、Frequency_2001、Frequency_2002、...、Frequency_2015。
每年每个单词的频率都来自以前的数据帧。
有什么建议我如何编写高效的代码吗?
另外,如果您能提供更多信息,请重命名标题。
我想知道是否有一种方法,在 Postgres 上的 SELECT 语句中,将同一数据集中另一列的值作为列的别名。
鉴于此表:
| ID | 钥匙 | 价值 |
|---|---|---|
| 1 | A | d |
| 2 | A | e |
| 3 | 乙 | F |
这将是结果:
| ID | A | 乙 |
|---|---|---|
| 1 | d | 无效的 |
| 2 | e | 无效的 |
| 3 | 无效的 | F |
对于每个实例,列的名称是根据 的值确定的,key而该值是列的值value,不知道该列将提供什么样的值key。
这是一个可能的(不起作用)查询:
SELECT "id", "value" AS "t"."key" FROM testTable as t;
Run Code Online (Sandbox Code Playgroud) 我希望我的查询结果如下所示:
Person1 Person2 Person3 Person4 Total
Status1 2 4 7 3 16
Status2 0 1 0 3 4
Status3 0 0 0 0 0
Status4 0 1 3 0 4
Total 2 6 10 6 24
Run Code Online (Sandbox Code Playgroud)
我能够获得除底线以外的所有内容:
TRANSFORM Count(personName)
SELECT status, Count(status) AS Total
FROM table1
GROUP BY status
PIVOT personName
Run Code Online (Sandbox Code Playgroud)
我找到了一些关于使用UNION来解决最后一行的问题,但我似乎无法做到这一点.这似乎应该是一种常见的活动.
我有一个有很多列但只有几行的交叉表.当我生成报告时,交叉表重用一页中行下方的空白空间,并为相同的行呈现下一列.这样,几个页面在一个页面上垂直压缩:

我希望从第20天到第27天(交叉表的第二部分)的列显示在不在同一页面上的新页面上,并将该空格留空.
如何在"one"中取消多列的拆分?
现在我对每列都有一个univot,但这会产生很多空行.
请看截图.

在顶部,您可以看到输入数据.目前我正在中间的桌子上用这段代码:
SELECT [ID], [RowNumber], [Year], [Sales] FROM (
SELECT ID, RowNumber, [Sales 2013] as [2013], [Sales 2014] as [2014]
FROM mytable) p UNPIVOT (
[Sales] FOR [Year] IN ([2013], [2014]) )AS unpvt ;
Run Code Online (Sandbox Code Playgroud)
但我认为,由于实际数据包含更多列以及更多年的处理时间,因此最好进入底层表结构.
这是一个小提琴样本数据.
希望你能告诉我一个到达那里的方法.谢谢.
我得到了一个基于键值的表,其中每个键值对分配给一个由id标识的实体:
|_id__|_key_______|_value_|
| 123 | FIRSTNAME | John |
| 123 | LASTNAME | Doe |
Run Code Online (Sandbox Code Playgroud)
我想将它转换为这样的结构:
|_id__|_firstName_|_lastName_|
| 123 | John | Doe |
Run Code Online (Sandbox Code Playgroud)
我想可以使用postgres build in crosstabfunction来做到这一点.
你能告诉我怎么做并解释它为什么有效吗?