Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Sql 根据条件和分组进行计数_Sql_If Statement_Group By_Count_Distinct - Fatal编程技术网

Sql 根据条件和分组进行计数

Sql 根据条件和分组进行计数,sql,if-statement,group-by,count,distinct,Sql,If Statement,Group By,Count,Distinct,我想根据特定条件计算列中不同项目的数量。例如,如果表格如下所示: ID | name | date | status ---+--------+------------+-------- 1 | Andrew | 2020-04-12 | true 2 | John | 2020-03-22 | null 3 | Mary | 2020-04-13 | null 4 | John | 2020-05-27 | false 5 | Mary | 2020-

我想根据特定条件计算列中不同项目的数量。例如,如果表格如下所示:

ID | name   |    date    | status
---+--------+------------+--------
1  | Andrew | 2020-04-12 | true
2  | John   | 2020-03-22 | null
3  | Mary   | 2020-04-13 | null
4  | John   | 2020-05-27 | false
5  | Mary   | 2020-02-08 | true
6  | Andrew | 2020-02-08 | null
如果我想在最后一个日期的状态不为null的情况下,将不同名称的数量计算为名称计数,并按状态对它们进行分组,我应该怎么做

结果应该是:

status | name_count
-------+-----------
true   | 1            ---> Only counts Andrew (ID 1 has the last date)
false  | 1            ---> Only counts John (ID 4 has the last date)  
您可以尝试使用行号


您可以尝试下面的查询

SELECT COUNT(DISTINCT Name), Status 
  FROM Table
  WHERE Status IS NOT NULL
 GROUP BY Status;
这应该行得通,但是由于Andrew和Mary的身份都是true,那么true的name_count应该是2吗?至少这是我执行命令后的答案

status | name_count
-------+-----------
false   | 1           
true  | 2         

如果您对命令的工作方式有任何疑问,请告诉我

您的DBMS是什么我正在使用PostgreSQLDude,您成功了!排号是我的答案。谢谢!!
SELECT status,COUNT(*) AS name_count 
FROM (SELECT DISTINCT status,name FROM TEMP WHERE status IS NOT NULL) 
GROUP BY status;
status | name_count
-------+-----------
false   | 1           
true  | 2