小编Ama*_*nda的帖子

ORDER BY 给出错误:函数数组位置(文本 [],字符变化)不存在

我在当前存储为 VARCHAR 的 Postgres 数据库中有一个非常基本的分类列。我可以选择每个计数:

我虽然添加一个ORDER BY array_position()会做到这一点:

SELECT color, count(*)
FROM research
GROUP BY color 
ORDER BY array_position(ARRAY['Red','Orange','Yellow','Green','Blue'], color);
Run Code Online (Sandbox Code Playgroud)

但我看到一个类型错误:

ERROR: function array_position(text[], character varying) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 98
Run Code Online (Sandbox Code Playgroud)

我需要投射什么color才能使用该array_position功能对其进行排序?

postgresql order-by array enum

7
推荐指数
1
解决办法
3076
查看次数

重塑数据的技巧,类似于枢轴?

我有一个级别和年份表,大致如下所示:

INSERT INTO demo(first_name, rank, year) AS VALUES
  ('Peter',2,2017), ('Robert',3,2016), ('Evelyn',2,2017), 
  ('Rand',3,2017), ('Kofi',3,2017), ('Daniel',3,2016), ('Leonard',1,2017),
  ('Mary',1,2017), ('Frank',1,2017), ('John',3,2017), ('Mary',1,2016), 
  ('Gilbert',3,2016), ('Quince',2,2017), ('David',3,2017), ('Louis',2,2017),
  ('Felipe',2,2016), ('Alfonso',1,2017), ('Elise',3,2016), ('Jorge',3,2017),
  ('Mary',3,2016), ('Jasvant',2,2017), ('Paul',3,2017), ('Richard',2,2017),
  ('Christopher',2,2017), ('Johannes',2,2016), ('Nasser',3,2016), ('Bruce',3,2017), 
  ('John',3,2016), ('Frederic',3,2016);
Run Code Online (Sandbox Code Playgroud)

我可以用一个非常基本的方法捕获每个级别和年份的总数COUNT()

SELECT  rank, COUNT(*), year
FROM demo
GROUP BY rank, year
ORDER BY year, rank;
Run Code Online (Sandbox Code Playgroud)

这给了我一个相当整洁的演示数据摘要:

Rank  Count  Year
1      1    2016
2      2    2016
3      8    2016
1      4    2017
2      7    2017
3      7    2017
Run Code Online (Sandbox Code Playgroud)

我的实际数据要大得多,我希望能够在一个看起来更像这样的汇总表中看到它:

Rank    2016    2017 …
Run Code Online (Sandbox Code Playgroud)

postgresql pivot

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

标签 统计

postgresql ×2

array ×1

enum ×1

order-by ×1

pivot ×1