Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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如何按WXY和Z使用计数和分组_Sql_Sql Server_Postgresql_Count_Group By - Fatal编程技术网

SQL如何按WXY和Z使用计数和分组

SQL如何按WXY和Z使用计数和分组,sql,sql-server,postgresql,count,group-by,Sql,Sql Server,Postgresql,Count,Group By,假设我在计算W、X、Y和Z中元素的数量。我不关心WXY中的具体数字,我只关心Z。有没有一种方法可以制作这样的东西: column | count --------------- WXY | 10 Z | 5 而不是 column | count --------------- W | 2 X | 3 Y | 5 Z | 5 您可以使用公共表表达式(CTE)轻松地完成此操作,并在尝试获取记录计数之前聚合数据 它同时适用于Po

假设我在计算W、X、Y和Z中元素的数量。我不关心WXY中的具体数字,我只关心Z。有没有一种方法可以制作这样的东西:

column | count
---------------
 WXY   |  10
  Z    |  5
而不是

column | count
---------------
  W    |  2
  X    |  3
  Y    |  5
  Z    |  5


您可以使用公共表表达式(CTE)轻松地完成此操作,并在尝试获取记录计数之前聚合数据

它同时适用于PostgreSQL和SQL Server(但如果将列命名为“列”,则会出现问题)

PostgreSQL: SQL Server:


以下是有关使用和的文档。

请使用Ctrl+K,而不是一堆用于代码格式设置的

标记。这被标记为sql server和postgresql。您使用的是哪个数据库版本?如果两个版本都需要一个解决方案,那么是否需要在两个版本上使用相同的查询,或者对每个版本使用单独的查询?这将适用于PostGreSQL,但不适用于SQL Server。这两个问题都有标记,所以不清楚OP需要什么。
SELECT [column] = CASE 
  WHEN [column] IN ('W','X','Y') THEN 'WXY' ELSE 'Z' END,
  [count] = COUNT(*)
FROM dbo.[table]
WHERE [column] IN ('W','X','Y','Z')
  GROUP BY CASE 
  WHEN [column] IN ('W','X','Y') THEN 'WXY' ELSE 'Z' END
ORDER BY [column];
select case 
    when c in ('W', 'X', 'Y') then 'XYZ'
    else 'Z' end as c,
    count(*)
from t
group by 1
;with aggData as
(
   select case 
             when c = 'Z' then 'Z'
             else 'WXY' 
          end as col
   from t
)
select col, count(*)
from aggData
group by col