我可以在 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;
而此查询 returns 一条错误消息:
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
'Failed to prepare statement: 'B' is not a valid stream/table name or alias.
Caused by: 'B' is not a valid stream/table name or alias.'
无论如何,我可以完成这项工作吗?谢谢!
没有为 KSQL 实现子查询功能。
我对 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;
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
请记住,连接与关系数据库世界的含义截然不同,这里的数据通过多个存储桶中的键进行分区,它在概念上是一个 "colocated" 连接。有关 time-window 的更多详细信息,请点击此处。
希望对您有所帮助。
我是 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;
而此查询 returns 一条错误消息:
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
'Failed to prepare statement: 'B' is not a valid stream/table name or alias. Caused by: 'B' is not a valid stream/table name or alias.'
无论如何,我可以完成这项工作吗?谢谢!
没有为 KSQL 实现子查询功能。
我对 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;
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
请记住,连接与关系数据库世界的含义截然不同,这里的数据通过多个存储桶中的键进行分区,它在概念上是一个 "colocated" 连接。有关 time-window 的更多详细信息,请点击此处。
希望对您有所帮助。