簡體   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