如何在最终查询中添加包含空数据的行?
How to add a row with null data in final query?
我有一个 table 数据:
table1
country date price
USA 2001-01-25 2
RUS 2001-01-25 17
GER 2001-01-25 30
USA 2001-02-25 11
RUS 2001-02-25 22
RUS 2001-02-26 25
我可以得到所有国家
SELECT DISTINCT country FROM table1;
country
USA
RUS
GER
并获取当月的所有价格
SELECT sum(price), country FROM table1 WHERE date >= '2001-02-01' AND date < '2001-03-01' GROUP BY country, price;
sum(price) country
11 USA
47 RUS
但我还想看到国家/地区的一行 'GER'
sum(price) country
11 USA
47 RUS
0 GER
如何在 clickhouse 中轻松完成?
使用条件聚合:
SELECT
country,
SUM(CASE WHEN date >= '2001-02-01' AND date < '2001-03-01'
THEN price ELSE 0 END) AS prices
FROM table1
GROUP BY country;
您当前的 WHERE
子句的问题在于它将过滤掉 2001 年 2 月期间根本没有匹配价格的国家/地区。
如果上述解决方案性能不佳,我们可以将其编写为包含所有国家/地区的 table 到 table1
:
的连接
SELECT c.country, COALESCE(t.prices, 0) AS prices
FROM (SELECT DISTINCT country FROM table1) c
LEFT JOIN
(
SELECT country, SUM(prices) AS prices
FROM table1
WHERE date >= '2001-02-01' AND date < '2001-03-01'
GROUP BY country
) t
ON c.country = t.country;
我有一个 table 数据:
table1
country date price
USA 2001-01-25 2
RUS 2001-01-25 17
GER 2001-01-25 30
USA 2001-02-25 11
RUS 2001-02-25 22
RUS 2001-02-26 25
我可以得到所有国家
SELECT DISTINCT country FROM table1;
country
USA
RUS
GER
并获取当月的所有价格
SELECT sum(price), country FROM table1 WHERE date >= '2001-02-01' AND date < '2001-03-01' GROUP BY country, price;
sum(price) country
11 USA
47 RUS
但我还想看到国家/地区的一行 'GER'
sum(price) country
11 USA
47 RUS
0 GER
如何在 clickhouse 中轻松完成?
使用条件聚合:
SELECT
country,
SUM(CASE WHEN date >= '2001-02-01' AND date < '2001-03-01'
THEN price ELSE 0 END) AS prices
FROM table1
GROUP BY country;
您当前的 WHERE
子句的问题在于它将过滤掉 2001 年 2 月期间根本没有匹配价格的国家/地区。
如果上述解决方案性能不佳,我们可以将其编写为包含所有国家/地区的 table 到 table1
:
SELECT c.country, COALESCE(t.prices, 0) AS prices
FROM (SELECT DISTINCT country FROM table1) c
LEFT JOIN
(
SELECT country, SUM(prices) AS prices
FROM table1
WHERE date >= '2001-02-01' AND date < '2001-03-01'
GROUP BY country
) t
ON c.country = t.country;