在雪花中形成查询需要指导
Need guidance in forming a query in snowflake
SELECT id,
login_id,
count,
case when count = 0 then 'Cat_A'
WHEN count between 1 and 10 then 'Cat_B'
WHEN count > 10 then 'Cat_C'
WHEN count IS NULL THEN 'Cat D'
END as Category
FROM
(
select id,login_id,min(ord_count) AS count
FROM table_1 X
JOIN table_2 Y
ON X.id_col = Y.id_col
WHERE date = '2022-02-02'
AND login_id = 'True'
group by id,login_id
)A
LEFT JOIN
(
SELECT id,COUNT(X.ord_no) AS count_of_orders
FROM table_1 X
WHERE X.date = '2022-02-02'
group by id
)B
ON A.id=B.id
当我连接这两个表时,我得到了不匹配记录的 NULL 值。
我需要将那些 NULL 记录替换为一些硬编码值,比如 'XYZ'.
请提供有关如何实现此目标的任何指导?
所以顶级 select 需要命名它正在使用的 ID(其他数据库不需要这个雪花),假设你是 selecting 来自 A
和 b.id
可能会丢失,应该是 a.id
count_of_orders
未使用,因此目前 B
的 LEFT JOIN 毫无意义,鉴于您的问题是关于 LEFT JOIN 这一定是您所指的列? ?
替换 NULL 值可以通过 COALESCE or NVL or ZEROIFNULL 完成,因为唯一的空值是计数,zeroifnull 在这里似乎有意义。
这一切让我觉得你的 SQL 需要看起来像:
SELECT
a.id,
a.login_id,
a.count,
case
WHEN a.count = 0 then 'Cat_A'
WHEN a.count between 1 and 10 then 'Cat_B'
WHEN a.count > 10 then 'Cat_C'
WHEN a.count IS NULL THEN 'Cat D'
END as Category,
ZEROIFNULL(b.count_of_orders) as count_of_orders
FROM (
SELECT
id,
login_id,
min(ord_count) AS count
FROM table_1 AS X
JOIN table_2 AS Y
ON X.id_col = Y.id_col
WHERE date = '2022-02-02'
AND login_id = 'True'
group by id,login_id
) as A
LEFT JOIN (
SELECT
x.id,
COUNT(X.ord_no) AS count_of_orders
FROM table_1 as X
WHERE X.date = '2022-02-02'
group by x.id
)as B
ON A.id=B.id
A
sub-select 确实应该使用您命名为 X
、Y
的别名,以便我们知道哪些表 id
、login_id
,ord_count
,&date
都来自.
SELECT id,
login_id,
count,
case when count = 0 then 'Cat_A'
WHEN count between 1 and 10 then 'Cat_B'
WHEN count > 10 then 'Cat_C'
WHEN count IS NULL THEN 'Cat D'
END as Category
FROM
(
select id,login_id,min(ord_count) AS count
FROM table_1 X
JOIN table_2 Y
ON X.id_col = Y.id_col
WHERE date = '2022-02-02'
AND login_id = 'True'
group by id,login_id
)A
LEFT JOIN
(
SELECT id,COUNT(X.ord_no) AS count_of_orders
FROM table_1 X
WHERE X.date = '2022-02-02'
group by id
)B
ON A.id=B.id
当我连接这两个表时,我得到了不匹配记录的 NULL 值。 我需要将那些 NULL 记录替换为一些硬编码值,比如 'XYZ'.
请提供有关如何实现此目标的任何指导?
所以顶级 select 需要命名它正在使用的 ID(其他数据库不需要这个雪花),假设你是 selecting 来自
A
和b.id
可能会丢失,应该是a.id
count_of_orders
未使用,因此目前B
的 LEFT JOIN 毫无意义,鉴于您的问题是关于 LEFT JOIN 这一定是您所指的列? ?替换 NULL 值可以通过 COALESCE or NVL or ZEROIFNULL 完成,因为唯一的空值是计数,zeroifnull 在这里似乎有意义。
这一切让我觉得你的 SQL 需要看起来像:
SELECT
a.id,
a.login_id,
a.count,
case
WHEN a.count = 0 then 'Cat_A'
WHEN a.count between 1 and 10 then 'Cat_B'
WHEN a.count > 10 then 'Cat_C'
WHEN a.count IS NULL THEN 'Cat D'
END as Category,
ZEROIFNULL(b.count_of_orders) as count_of_orders
FROM (
SELECT
id,
login_id,
min(ord_count) AS count
FROM table_1 AS X
JOIN table_2 AS Y
ON X.id_col = Y.id_col
WHERE date = '2022-02-02'
AND login_id = 'True'
group by id,login_id
) as A
LEFT JOIN (
SELECT
x.id,
COUNT(X.ord_no) AS count_of_orders
FROM table_1 as X
WHERE X.date = '2022-02-02'
group by x.id
)as B
ON A.id=B.id
A
sub-select 确实应该使用您命名为 X
、Y
的别名,以便我们知道哪些表 id
、login_id
,ord_count
,&date
都来自.