如果两列为 0,我如何 return 清空?
How do I return empty if two columns are 0?
我有以下查询:
SELECT a.timestamp AS start, a.timestamp + (1 * INTERVAL '1 hour') AS end,
count_1, count_2
FROM (
SELECT time_bucket_gapfill(CAST(1 * INTERVAL '1 hour' AS INTERVAL), time) AS timestamp,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 1') THEN time END), 0) count_1,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 2') THEN time END), 0) count_2
FROM info
JOIN person USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp) a
ORDER BY a.timestamp ASC
查询给了我这样的信息:
| start | end | count_1 | count_2 |
-----------------------------------------------------------------
| 2022-04-29 22:00:00 | 2022-04-29 23:00:00 | 0 | 0 |
| 2022-04-29 23:00:00 | 2022-04-30 00:00:00 | 0 | 0 |
| 2022-04-30 00:00:00 | 2022-04-30 01:00:00 | 0 | 0 |
| 2022-04-30 01:00:00 | 2022-04-30 02:00:00 | 0 | 0 |
| 2022-04-30 02:00:00 | 2022-04-30 03:00:00 | 0 | 0 |
...
我唯一想知道的是是否有一种方法可以说明如果 count_1 和 count_2 中的所有行都是 0,那么就不要 return 任何东西。我只想返回一个空结果。这可能吗?
您可以在下面添加 WHERE EXISTS 条件以检查是否有任何记录具有 count_1 和 count_2 的 1-0、1-1 或 0-1 值返回。
WHERE EXISTS (SELECT 1
FROM (
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 1') THEN time END), 0) count_1,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 2') THEN time END), 0) count_2
FROM info JOIN person USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp) ip
WHERE count_1 <> 0 OR count_2 <> 0)
你可以把子查询a
放到一个WITH
查询中,然后使用另一个基于此的子查询过滤掉结果如
WITH a AS
(
SELECT time_bucket_gapfill(CAST(1 * INTERVAL '1 hour' AS INTERVAL),
time) AS timestamp,
COALESCE(COUNT(DISTINCT CASE
WHEN type IN ('Type 1') THEN
time
END),
0) count_1,
COALESCE(COUNT(DISTINCT CASE
WHEN type IN ('Type 2') THEN
time
END),
0) count_2
FROM info
JOIN person
USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp
)
SELECT timestamp AS start, timestamp + (1 * INTERVAL '1 hour') AS "end",
count_1, count_2
FROM a
WHERE (SELECT SUM(count_1+count_2) FROM a)!=0
ORDER BY a.timestamp ASC
我有以下查询:
SELECT a.timestamp AS start, a.timestamp + (1 * INTERVAL '1 hour') AS end,
count_1, count_2
FROM (
SELECT time_bucket_gapfill(CAST(1 * INTERVAL '1 hour' AS INTERVAL), time) AS timestamp,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 1') THEN time END), 0) count_1,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 2') THEN time END), 0) count_2
FROM info
JOIN person USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp) a
ORDER BY a.timestamp ASC
查询给了我这样的信息:
| start | end | count_1 | count_2 |
-----------------------------------------------------------------
| 2022-04-29 22:00:00 | 2022-04-29 23:00:00 | 0 | 0 |
| 2022-04-29 23:00:00 | 2022-04-30 00:00:00 | 0 | 0 |
| 2022-04-30 00:00:00 | 2022-04-30 01:00:00 | 0 | 0 |
| 2022-04-30 01:00:00 | 2022-04-30 02:00:00 | 0 | 0 |
| 2022-04-30 02:00:00 | 2022-04-30 03:00:00 | 0 | 0 |
...
我唯一想知道的是是否有一种方法可以说明如果 count_1 和 count_2 中的所有行都是 0,那么就不要 return 任何东西。我只想返回一个空结果。这可能吗?
您可以在下面添加 WHERE EXISTS 条件以检查是否有任何记录具有 count_1 和 count_2 的 1-0、1-1 或 0-1 值返回。
WHERE EXISTS (SELECT 1
FROM (
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 1') THEN time END), 0) count_1,
COALESCE(COUNT(DISTINCT CASE WHEN type IN ('Type 2') THEN time END), 0) count_2
FROM info JOIN person USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp) ip
WHERE count_1 <> 0 OR count_2 <> 0)
你可以把子查询a
放到一个WITH
查询中,然后使用另一个基于此的子查询过滤掉结果如
WITH a AS
(
SELECT time_bucket_gapfill(CAST(1 * INTERVAL '1 hour' AS INTERVAL),
time) AS timestamp,
COALESCE(COUNT(DISTINCT CASE
WHEN type IN ('Type 1') THEN
time
END),
0) count_1,
COALESCE(COUNT(DISTINCT CASE
WHEN type IN ('Type 2') THEN
time
END),
0) count_2
FROM info
JOIN person
USING (id)
WHERE time >= '2022-04-29 22:00:00.0'
AND time < '2022-04-30 22:00:00.0'
GROUP BY timestamp
)
SELECT timestamp AS start, timestamp + (1 * INTERVAL '1 hour') AS "end",
count_1, count_2
FROM a
WHERE (SELECT SUM(count_1+count_2) FROM a)!=0
ORDER BY a.timestamp ASC