Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何使用ORACLE数据库根据特定文本对列进行分组和求和_Sql_Oracle - Fatal编程技术网

Sql 如何使用ORACLE数据库根据特定文本对列进行分组和求和

Sql 如何使用ORACLE数据库根据特定文本对列进行分组和求和,sql,oracle,Sql,Oracle,我是甲骨文的新手。尝试根据特定文本对列进行分组并对其他列求和 假设我有下面的表格 我想把所有姓的人都分组。如下 我不知道该怎么做。 注意:可能有多个名称,但我只想筛选Sharma、Decosta和Liver 更新问题。 很抱歉更新了这个问题。但在真实场景中,搜索字符串并不总是最后一个 我再举一个例子。 输出 您可以使用regexp\u substr: 到目前为止提供的查询似乎确实能够满足您的需求。但以下情况确实如此: With inputs as ( select 'Rahul Kum

我是甲骨文的新手。尝试根据特定文本对列进行分组并对其他列求和

假设我有下面的表格

我想把所有姓的人都分组。如下

我不知道该怎么做。 注意:可能有多个名称,但我只想筛选Sharma、Decosta和Liver

更新问题。 很抱歉更新了这个问题。但在真实场景中,搜索字符串并不总是最后一个

我再举一个例子。

输出

您可以使用regexp\u substr:


到目前为止提供的查询似乎确实能够满足您的需求。但以下情况确实如此:

With inputs as
(
    select 'Rahul Kumar Sharma' as Name, 10 as No_of_beer_bottles from dual union all
    select 'Rohith Kumar Sharma' as Name, 5 as No_of_beer_bottles from dual union all
    select 'Sharma' as Name, 20 as No_of_beer_bottles from dual union all
    select 'Rahul Kumar Varma' as Name, 10 as No_of_beer_bottles from dual
)
select  SUBSTR(name,Instr(name,' ',-1)+1) as Name, sum(No_of_beer_bottles) as No_of_beer_bottles
from    inputs
group by SUBSTR(name,Instr(name,' ',-1)+1);
输出:


如果您使用一个包含所有要搜索的单词的表,或者像我下面所做的那样在一个公共表表达式中定义它们,那么您可以在该搜索词上进行连接,然后对数值列求和

问题1 结果1 问题2 结果2
应该是总和。对吧?我得到下面的结果不是求和。姓氏计数Decosta 1 Decosta 1 Sharma 2 Liver 1 Sharma 1正确,应为总和。我试着从select regexp_substrname中选择last_name,sumcount,“[^]+$”作为last_name,count*作为啤酒组的计数,按regexp_substrname,[^]+$”按last_name分组;但是力help@Varun,您是否尝试了我发布的解决方案?工作正常吗?@Ranagal。是的,应该是sum,现在是。你如何确定姓是什么?如果这是一场比赛呢?最好将Name列拆分为两列,即First_Name和Last_Name。不幸的是,这不是真实的数据。我有一个字符串,我需要找到一些关键字的基础上。所以我不能分开它狗走了狗算一次还是两次?狗不能使用笔算是狗和笔的一次出现吗?肖恩·潘(Sean Penn)在宾夕法尼亚州旅行,直到到达倒数第二英里时没有受到处罚。那里有多少支笔?嘿,感谢ans。这对给定的问题有效。但不幸的是,在真实场景中,姓氏最终不会出现。基本上我创建了虚拟日期。简言之,我有一个字符串,我需要基于该字符串搜索列,并对其值求和。搜索字符串已给定。@Rangal已更新question@Varun好啊你如何知道你必须提取什么并将其命名?如果你有规则。告诉我们,我们将尝试。这是一个预定义的单词,在上面的例子中是pen和dog
With inputs as
(
    select 'Rahul Kumar Sharma' as Name, 10 as No_of_beer_bottles from dual union all
    select 'Rohith Kumar Sharma' as Name, 5 as No_of_beer_bottles from dual union all
    select 'Sharma' as Name, 20 as No_of_beer_bottles from dual union all
    select 'Rahul Kumar Varma' as Name, 10 as No_of_beer_bottles from dual
)
select  SUBSTR(name,Instr(name,' ',-1)+1) as Name, sum(No_of_beer_bottles) as No_of_beer_bottles
from    inputs
group by SUBSTR(name,Instr(name,' ',-1)+1);
WITH
    search_words (word)
    AS
        (SELECT 'Sharma' FROM DUAL
         UNION ALL
         SELECT 'Decosta' FROM DUAL
         UNION ALL
         SELECT 'Liver' FROM DUAL),
    d (name, num_beers)
    AS
        (SELECT 'Ravi Sharma', 1 FROM DUAL
         UNION ALL
         SELECT 'Sam Decosta', 4 FROM DUAL
         UNION ALL
         SELECT 'Jhony Liver', 5 FROM DUAL
         UNION ALL
         SELECT 'Ravi Sharma', 2 FROM DUAL
         UNION ALL
         SELECT 'Rohul Sharma', 3 FROM DUAL
         UNION ALL
         SELECT 'Jhon Decosta', 3 FROM DUAL
         UNION ALL
         SELECT 'V Decosta', 3 FROM DUAL)
  SELECT sw.word, SUM (d.num_beers) AS total_beer
    FROM search_words sw, d
   WHERE INSTR (UPPER (d.name), UPPER (sw.word)) > 0
GROUP BY sw.word;
      WORD    TOTAL_BEER
__________ _____________
Decosta               10
Sharma                 6
Liver                  5
WITH
    search_words (word)
    AS
        (SELECT 'Pen' FROM DUAL
         UNION ALL
         SELECT 'Dog' FROM DUAL),
    d (name, quantity)
    AS
        (SELECT 'Ravi have red pens', 2 FROM DUAL
         UNION ALL
         SELECT 'Sam''s grifriend have black dogs', 4 FROM DUAL
         UNION ALL
         SELECT 'Jhony has blue pen', 1 FROM DUAL
         UNION ALL
         SELECT 'Ravi has white dog', 1 FROM DUAL
         UNION ALL
         SELECT 'Rahul has small dogs', 3 FROM DUAL
         UNION ALL
         SELECT 'There are pens inside Jhon''s car', 3 FROM DUAL
         UNION ALL
         SELECT 'My dog and me are flying.', 1 FROM DUAL)
  SELECT sw.word, SUM (d.quantity) AS total_quantity
    FROM search_words sw, d
   WHERE INSTR (UPPER (d.name), UPPER (sw.word)) > 0
GROUP BY sw.word;
   WORD    TOTAL_QUANTITY
_______ _________________
Dog                     9
Pen                     6