我正在使用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