sql - Oracle SQL 中的 Sum() 连接方式

标签 sql oracle10g

我正在尝试解决 oracle SQL 场景。我必须使用 SQL 查询找到两个地方之间的所有可能路径并计算它们之间的总距离、两个地方之间的停靠站数和路径。源表包含 3 列Departure_city、Arrival_City 和 Distance

我写了一个 SQL 查询并确定了停靠点数和路径。但是我找不到总距离。 我的查询是:

 select * from(select arrive , level-1 , sys_connect_by_path (depart ,',')   
    from travel  
    start with depart = 'Mexico'  
    connect by nocycle prior arrive=depart)  
    where arrive = 'New York';  

这里我把Delhi作为Departure_cityBangalore作为Arrival city

最佳答案

这有点棘手,因为您想要获取递归查询所采用路径的 sum。这个解决方案有点不正统,但应该可行:

CREATE OR REPLACE FUNCTION prod.eval (p_equation VARCHAR2)
   RETURN NUMBER IS
   v_result NUMBER;
BEGIN
   IF LENGTH (TRIM (TRANSLATE (p_equation, '1234567890+-()*/', ' ')))
         IS NOT NULL THEN
      raise_application_error (
         -20000,
         'EVAL: Parameter contains non mathematical values');
   END IF;

   EXECUTE IMMEDIATE ' begin :1 := ' || p_equation || '; end;'
      USING OUT v_result;

   RETURN v_result;
END;
/

select * from(select arrive , 
                     level-1 , 
                     sys_connect_by_path (depart ,',') as hops
                     eval('0' || sys_connect_by_path (distance ,'+')) as distance
              from travel  
              start with depart = 'Delhi'  
              connect by nocycle prior arrive=depart)  
where arrive = 'Bangalore';

关于sql - Oracle SQL 中的 Sum() 连接方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23657633/

相关文章:

sql - Oracle XE 10g 中的 MERGE 和 ON DELETE CASCADE

mysql - 如何计算Mysql中两个日期之间不包括周末(周六和周日)的天数?

oracle - oracle如何导出空表

performance - 如何降低 select 语句的成本?

PHP LIKE 不起作用

sql - 使用 rownum 选择表格的第二行

oracle - 如何在游标中使用嵌套表

C# - 什么是超时和失败连接的好的 SQLException 错误处理

mysql - 如何使用mysql中的find_in_set()函数来过滤数据?

sql - 对大陆、国家和州的表中的层次值求和