相关疑难解决方法(0)

PostgreSQL交叉表查询

有没有人知道如何在PostgreSQL中创建交叉表查询?
例如,我有下表:

Section    Status    Count
A          Active    1
A          Inactive  2
B          Active    4
B          Inactive  5
Run Code Online (Sandbox Code Playgroud)

我想查询返回以下交叉表:

Section    Active    Inactive
A          1         2
B          4         5
Run Code Online (Sandbox Code Playgroud)

这可能吗?

sql postgresql pivot case crosstab

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

SQL计数列

创建用于计算表中数据出现次数的列的最佳方法是什么?该表需要按一列分组.

我见过

SELECT
    sum(CASE WHEN question1 = 0 THEN 1 ELSE 0 END) AS ZERO,
    sum(CASE WHEN question1 = 1 THEN 1 ELSE 0 END) AS ONE,
    sum(CASE WHEN question1 = 2 THEN 1 ELSE 0 END) AS TWO,
    category
FROM reviews
    GROUP BY category
Run Code Online (Sandbox Code Playgroud)

其中question1的值可以是0,1或2.

我也看过使用它的一个版本 count(CASE WHEN question1 = 0 THEN 1)

然而,随着question1的可能值的数量增加,这变得更加麻烦.有没有一种方便的方法来编写此查询,可能会优化性能?

PS.我的数据库是PostgreSQL

sql postgresql group-by count aggregate-filter

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

按星期几组

我有一个conversations带有inserted_at列的表

我想绘制一个图表,显示conversations随时间创建的数量.

我希望能够按日期,星期几和日期时间对数据进行分组,以显示可能的趋势.

我将使用7天,1个月和6个月的间隔.

例:

间隔:1 month分组day of week

我喜欢类似的东西

| Monday | Tuesday | Wednesday | Thursday | Friday |
|--------|---------|-----------|----------|--------|
| 11     | 22      | 19        | 17       | 10     |
Run Code Online (Sandbox Code Playgroud)

或间隔:7 days分组依据date

| 1/1 | 2/1 | 3/1 | 4/1 | 5/1 | 6/1 | 7/1 |
|-----|-----|-----|-----|-----|-----|-----|
| 11  | 22  | 19  | 17  | 10  | 10  | 7   |
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么(非常感谢示例),PostgreSQL是否适合这类查询?

最后,是否有任何特殊的索引可以改善此类查询?

sql postgresql

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

标签 统计

postgresql ×3

sql ×3

aggregate-filter ×1

case ×1

count ×1

crosstab ×1

group-by ×1

pivot ×1