相关疑难解决方法(0)

在单个 SELECT 语句中返回多个范围的计数

我有一个 Postgres 数据库表foo,其中有一个score范围为 0 - 10的列。我想要一个查询来返回分数总数、0 到 3 之间的分数数、4 之间的分数数和 6,以及 7 到 10 之间的分数。类似于以下内容:

SELECT
  COUNT(*) as total,
  COUNT(
    SELECT * from foo where score between 0 and 3;
  ) as low,
  COUNT(
    SELECT * from foo where score between 4 and 6;
  ) as mid,
  COUNT(
    SELECT * from foo where score between 7 and 10;
  ) as high
FROM foo;
Run Code Online (Sandbox Code Playgroud)

我试过这个,但SELECTCOUNT语句中出现错误。任何想法我怎么能做到这一点?我确定 Postgres 中有一个超级简单的方法。我只是想不出 Google 的正确术语。

postgresql aggregate aggregate-filter

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

Postgres:使用 group by 的结果作为列名

我在数据库中有一个消息表,其中包括发件人 ID 和消息类型(当然还有更多与此问题无关的列)。我尝试创建一个查询来计算用户发送的每种类型的消息数量。

例如,如果我有下表:

---------------------------
身份证 | 用户 ID | 消息类型
---------------------------
1 | 1 | 私人的
2 | 1 | 民众
3 | 1 | 私人的
---------------------------

然后我想得到以下内容:

---------------------
身份证 | 私人 | 民众
---------------------
1 | 2 | 1
---------------------

所以实际上我想按 message_type 和 user_id 分组,但不是为每个用户生成多行,我想创建多个列,每个 message_type 一个

我可以在不对查询中的消息类型进行硬编码的情况下实现这一点吗?

postgresql group-by

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