繁体   English   中英

我可以在 KSQL 中编写子查询吗?

[英]Can I write sub query in KSQL?

我是ksql并且使用mysql的时间最长。 我想知道在KSQL是否有子查询?

这个查询没有任何问题:

SELECT a.executedate, count(a.pno), sum(a.amount) FROM
tb3_withdraw_record_summary a WHERE a.status='3' GROUP BY
a.executedate;

而此查询返回错误消息:

SELECT a.executedate, count(a.pno), sum(a.amount), (SELECT COUNT(b.pno)
FROM tb3_withdraw_record_summary b WHERE b.status='5' AND
b.executedate = a.executedate) FROM tb3_withdraw_record_summary a
WHERE a.status='3' GROUP BY a.executedate

'准备语句失败:'B' 不是有效的流/表名称或别名。 引起:“B”不是有效的流/表名称或别名。

无论如何让我完成这项工作? 谢谢!

Ksql 目前不支持嵌套查询功能,但您可以通过以下方式进行 -

1) CREATE STREAM B AS SELECT COUNT(b.pno)
FROM tb3_withdraw_record_summary b WHERE b.status='5';
2) SELECT a.executedate, count(a.pno), sum(a.amount) FROM tb3_withdraw_record_summary a JOIN B within 5 hours ON b.executedate = a.executedate WHERE a.status='3' GROUP BY a.executedate

请记住,连接与关系数据库世界的含义非常不同,这里的数据通过多个存储桶中的键进行分区,并且在概念上是“共置”连接。 关于时间窗口的更多细节在这里。

希望它会有所帮助。

KSQL 未实现子查询功能。

https://github.com/confluentinc/ksql/issues/745

我不熟悉 KSQL,但也许这可以满足您的需求:

SELECT wrs.executedate,
       SUM(CASE WHEN wrs.status IN ('3') THEN 1 ELSE 0 END), 
       SUM(CASE WHEN wrs.status IN ('3') THEN amount ELSE 0 END), 
       SUM(CASE WHEN wrs.status IN ('5') THEN 1 ELSE 0 END) 
FROM tb3_withdraw_record_summary wrs
WHERE wrs.status IN ('3', '5')
GROUP BY wrs.executedate;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM