Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用group by选择并计数两列_Postgresql - Fatal编程技术网

Postgresql 使用group by选择并计数两列

Postgresql 使用group by选择并计数两列,postgresql,Postgresql,我有这张桌子 +----+----------------------------+---------------+----------+ | ID | CREATED_AT | CATEGORY | TYPE | +----+----------------------------+---------------+----------+ | 1 | 2017-11-23 23:00:40.221958 | SEM COBERTURA | ca

我有这张桌子

+----+----------------------------+---------------+----------+
| ID |         CREATED_AT         |   CATEGORY    |   TYPE   |
+----+----------------------------+---------------+----------+
|  1 | 2017-11-23 23:00:40.221958 | SEM COBERTURA | callback |
|  2 | 2017-11-23 22:58:36.970052 | VENDA         | ativo    |
|  3 | 2017-11-23 22:47:03.956185 | SEM COBERTURA | ativo    |
|  4 | 2017-11-23 22:42:24.309915 | VENDA         | ativo    |
|  5 | 2017-11-23 22:32:48.780418 | SEM COBERTURA | callback |
|  6 | 2017-11-23 22:12:21.631433 | VENDA         | callback |
|  7 | 2017-11-23 22:09:38.52699  | SEM COBERTURA | ativo    |
|  8 | 2017-11-23 22:08:09.836343 | LIGACAO MUDA  | callback |
|  9 | 2017-11-23 22:08:07.058063 | SEM COBERTURA | callback |
| 10 | 2017-11-23 22:07:02.067439 | LIGACAO MUDA  | other    |
+----+----------------------------+---------------+----------+
在上表中,我希望按分组,对列类型求和,对类别“VENDA”求和,例如:

这就是我想要的

+----------+------------+----------------+
|   TYPE   | COUNT_TYPE | COUNT_CATEGORY_VENDA |
+----------+------------+----------------+
| callback |          5 |              1 |
| ativo    |          4 |              2 |
| other    |          1 |              0 |
+----------+------------+----------------+
类型“callback”出现5次,有1个类别“VENDA”,“ativo”出现4次,有2个“VENDA”

要获取类型和计数类型,我使用以下查询:

SELECT TYPE, count(TYPE) AS COUNT_TYPE FROM table WHERE created_at BETWEEN '2017-11-23 00:00:00' AND '2017-11-23 23:59:00' GROUP BY TYPE ORDER BY COUNT_TYPE DESC

有人能帮我吗?

有几种方法可以做到这一点。IMHO最简单的方法是使用
case when
过滤查询中要计算的内容

SELECT
  TYPE,
  count(TYPE) AS COUNT_TYPE,
  SUM(
    case CATEGORY when 'VENDA' then 1 else 0 end
  ) AS COUNT_CATEGORY_VENDA
FROM table
WHERE
  created_at BETWEEN '2017-11-23 00:00:00' AND '2017-11-23 23:59:00' 
GROUP BY TYPE
ORDER BY COUNT_TYPE DESC;
除了在d1时使用
CASE col,然后在d2时使用v1,然后在v2 ELSE v3 END
之外,您还可以尝试在col=d1时使用
CASE col,然后在col=d2时使用v1,然后在v2 ELSE v3 END
中使用


另一种方法是使用子查询。

有几种方法可以做到这一点。IMHO最简单的方法是使用
case when
过滤查询中要计算的内容

SELECT
  TYPE,
  count(TYPE) AS COUNT_TYPE,
  SUM(
    case CATEGORY when 'VENDA' then 1 else 0 end
  ) AS COUNT_CATEGORY_VENDA
FROM table
WHERE
  created_at BETWEEN '2017-11-23 00:00:00' AND '2017-11-23 23:59:00' 
GROUP BY TYPE
ORDER BY COUNT_TYPE DESC;
除了在d1时使用
CASE col,然后在d2时使用v1,然后在v2 ELSE v3 END
之外,您还可以尝试在col=d1时使用
CASE col,然后在col=d2时使用v1,然后在v2 ELSE v3 END
中使用


另一种方法是使用子查询。

在postgresql中可以使用case

SELECT TYPE, count(TYPE) AS COUNT_TYPE, SUM(case CATEGORY when 'VENDA' then 1 else 0 end) FROM table WHERE created_at BETWEEN '2017-11-23 00:00:00' AND '2017-11-23 23:59:00' GROUP BY TYPE ORDER BY COUNT_TYPE DESC

在postgresql中可以使用case

SELECT TYPE, count(TYPE) AS COUNT_TYPE, SUM(case CATEGORY when 'VENDA' then 1 else 0 end) FROM table WHERE created_at BETWEEN '2017-11-23 00:00:00' AND '2017-11-23 23:59:00' GROUP BY TYPE ORDER BY COUNT_TYPE DESC

伯爵不会解决这个问题,他应该使用Sum谢谢你的解释。但正如@CanFil所说。我不得不用SUM代替CASEcount不能解决问题,他应该用SUM谢谢你的解释。但正如@CanFil所说。我不得不用SUM代替casefil@CanFil。这正是我想要的。谢谢@CanFil。这正是我想要的。