postgreSQL选择列组,其中值的比率为1



我正在使用PSQL。

我有一个有几列的表,其中一列是event,它可以有4个不同的值——X1、X2、Y1、Y2。我有另一个列,它是服务的名称,我想使用这个列进行分组。

我的目标是进行一个接受事件的查询,并验证对于一个特定的服务名称,如果不显示一个带有"X1"的新列;错误";

这可能吗?我对SQL有点陌生,不知道该怎么写。

到目前为止,我尝试了类似的东西

select 
service_name, event, count(service_name) 
from 
service_table st 
group by 
(service_name, event); 

我正在获取特定service_name的每个事件的计数,但我想验证每个service_name的事件1的计数==事件2的计数。

我想补充一点,每个service_name只能选择两个不同的事件。

您可能不需要子查询/CTE,但它会起作用(并使逻辑更易于遵循(:

WITH event_counts_by_service AS (SELECT
service_name
, COUNT(CASE WHEN event='X1' THEN 1 END) AS count_x1
, COUNT(CASE WHEN event='X2' THEN 1 END) AS count_x2
FROM service_table
GROUP BY service_name)
SELECT service_name
, CASE WHEN count_x1=count_x2 THEN NULL ELSE 'Error' END AS are_counts_equal
FROM event_counts_by_service

最新更新