如何在最终查询中添加数据为空的行?

m0rkklqb  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(381)

我有一个数据表:

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

但我也想看到一排代表国家“格”

sum(price) country
   11        USA
   47        RUS
    0        GER

如何在clickhouse轻松完成?

bnlyeluc

bnlyeluc1#

使用条件聚合:

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月期间完全没有匹配价格的国家。
如果上述解决方案无法执行,我们可以将其作为包含所有国家/地区的表的联接来编写 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;

相关问题