繁体   English   中英

查询结果作为另一个变量使用 jdbc

[英]Query result as variable in another using jdbc

因为我想优化查询,所以我想放弃连接。 因此,我需要在主查询之前声明一个变量,但我找不到在 jdbc 语句中使用它的解决方案。

原始查询:

SELECT 
  d.orders
  SUM(price * qty) / d.orders
FROM main_table
INNER JOIN (
   SELECT SUM(qty) AS orders FROM main_table
   WHERE status = 1) d
WHERE status = 1
GROUP BY d.orders

格式化查询:

SET @orders = SELECT SUM(qty) AS orders FROM main_table WHERE status = 1
SELECT 
  @orders,
  SUM(price * qty) / @orders
FROM main_table
WHERE status = 1

我找不到使用jdbc正确执行此formatted查询的解决方案。 由于按变量分组,我不确定这是否会正确运行。 另外,我不想使用第一个结果在第二个中将其分成 2 个单独的执行,因为这会增加执行时间和查询次数。

jdbc代码的一部分

val statement = conn.prepareStatement(query)
val rset = statement.executeQuery()
if (rset.next()) {
   // read results
}

这是每 10 秒执行一次,因为在实时仪表板中使用。 数据库类型是Impala Kudu (我正在考虑将查询构建为存储过程,但恐怕 Kudu 不支持它)。 该应用程序是在Scala中编写的,但使用jdbc中的Java来查询数据库。

我已经从查询中删除了一些方法(十进制转换)以优化查询并使其尽可能简单,但我仍然想在那里删除一些无用的连接。 不是唯一的,我还有其他一些类似的查询,因此,小的升级可以带来巨大的好处。

谢谢

我建议使用

SELECT 
  SUM(qty),
  SUM(price * qty)
FROM main_table
WHERE status = 1

当您获得结果时,只需将 java 代码中的第二个值除以第一个值即可。

或者更好:

SELECT 
  SUM(price * qty) / SUM(qty)
FROM main_table
WHERE status = 1

暂无
暂无

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

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