0 0

如何将这2个查询合并,只查询一次0

第一个sql
SELECT COUNT(0),user_id,onlinekf_get_customer_name(user_id) customerName FROM(
SELECT COUNT(0),user_id
  FROM BUSINESS_CHAT_MSG T
WHERE T.USER_ID IN
       (SELECT ID
          FROM BASE_CUSTOMER_INFO T
         WHERE COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660')
         AND chat_time>=to_date('2014-04-01 00:00:00','yyyy-MM-dd hh24:mi:ss')
         AND chat_time<=to_date('2014-04-25 23:59:59','yyyy-MM-dd hh24:mi:ss')
     GROUP BY user_id,t.chat_basic_id)
         GROUP BY user_id
第二个sql
SELECT COUNT(0),user_id,onlinekf_get_customer_name(user_id) customerName FROM(
SELECT COUNT(0) vc,user_id,chat_basic_id
  FROM BUSINESS_CHAT_MSG T
WHERE T.USER_ID IN
       (SELECT ID
          FROM BASE_CUSTOMER_INFO T
         WHERE COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660')
         AND sendrole_type='0'             
         AND chat_time>=to_date('2014-04-01 00:00:00','yyyy-MM-dd hh24:mi:ss')
         AND chat_time<=to_date('2014-04-25 23:59:59','yyyy-MM-dd hh24:mi:ss')
     GROUP BY user_id,t.chat_basic_id)
         GROUP BY user_id
两个sql唯一的区别是其中有个条件不同,但却要查询2次,能否合并成一个,只查询一次,不能通过union,union还是查了2次

问题补充:第一个sql count算的是 对话数量,第二个sql count 算的是 有效对话数量,显示的时候要分2列,显示在一条记录里(对话数量   有效对话数量),不是把他们合并,放在一列里

问题补充:数据库为oracle
2014年5月16日 14:46

4个答案 按时间排序 按投票排序

0 0

采纳的答案

select a.user_id,
		onlinekf_get_customer_name(user_id) customerName ,
		count(1) 对话数量,
		sum(decode(b.sendrole_type,'0',1,0)) 有效对话数量
from BUSINESS_CHAT_MSG a,BASE_CUSTOMER_INFO b
where a.user_id = b.id
	and b.COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660')             
	AND b.chat_time>=to_date('2014-04-01 00:00:00','yyyy-MM-dd hh24:mi:ss') 
	AND b.chat_time<=to_date('2014-04-25 23:59:59','yyyy-MM-dd hh24:mi:ss') 


大概意思就是两表关联,直接count计算的就是对话数量,加了decode判断的就是有效对话数量

因为你没给表结构,所以可能直接运行不一定能用,你自己再改改

2014年5月16日 17:07
0 0

SELECT COUNT(0) vc,user_id,chat_basic_id,count(decode(tt.sendrole_type,'0',tt.sendrole_type)
FROM BUSINESS_CHAT_MSG T ,
(SELECT ID as user_id ,sendrole_type as sendrole_type
          FROM BASE_CUSTOMER_INFO T 
         WHERE COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660') 
                       
         AND chat_time>=to_date('2014-04-01 00:00:00','yyyy-MM-dd hh24:mi:ss') 
         AND chat_time<=to_date('2014-04-25 23:59:59','yyyy-MM-dd hh24:mi:ss') 
     GROUP BY user_id,t.chat_basic_id,sendrole_type) tt
where t.USER_ID = tt.user_id 
group by t.user_id,chat_basic_id


你给的语句有问题,group by现实两个字段,但group by 后面只给一个,而且外层最终结束括号也没有。

2014年5月17日 15:54
0 0

如果是oracle 可以考虑用with as
如:

WITH qb1 AS
  (SELECT inst_id FROM gv$session),
      qb2 AS
  (SELECT unique inst_id FROM qb1
   UNION ALL
   SELECT unique inst_id FROM qb1)
SELECT /*+ MATERIALIZE */ *
FROM qb1, qb2
WHERE qb1.inst_id = qb2.inst_id;

2014年5月16日 15:07
0 0

WHERE (COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660' or (COMPANY_ID = 'e4510180373c41a09a87b1f768a9b660' AND sendrole_type='0'  )) 不可以么?

2014年5月16日 14:59

相关推荐

    石子合并 在一个圆形操场的四周摆放着 n 堆石子. 现要将石子有次序地合并成一堆, 规定每次只能选相邻的 2 堆石子合并成新的一堆, 并将新的一堆石子数记为该次合并的得分.

    合并规则为:每次只能选择相邻的两堆石子进行合并,并将这两堆石子的数量相加得到的新数量作为这次合并的得分。题目要求对于给定的 \(n\) 堆石子,计算出所有可能的合并方案中得分的最小值和最大值。 #### 二、输入...

    使用Access巧妙合并多个Excel文件

    这样,我们只需设置一次,然后在每次需要重新组合Excel文件时运行联合查询。 五、注意事项 在使用Access合并多个Excel文件时,需要注意以下几点: * 必须将所有Excel文件链接到Access数据库中。 * 在SQL视图中,...

    从一次SQL查询中获得多个查询数值(6KB)

    本资源“从一次SQL查询中获得多个查询数值”显然关注的是如何通过一个SQL语句获取数据库中的多组数据,提高查询效率。下面我们将深入探讨这一主题。 首先,SQL查询的基础是SELECT语句,它用于从数据库中检索数据。...

    将多个Excel方便合并的工具

    这个工具通常允许用户一次性选择多个Excel文件,然后通过简单的步骤完成合并。可能的操作流程包括: 1. **文件选择**:用户可以通过文件浏览器或者拖放操作选择多个Excel文件,工具会自动识别并加载这些文件。 2....

    06-3-数据库查询-合并查询结果并去重

    通过对比可以看出,虽然`id=123`的行在两个查询中都出现了,但在最终结果集中只出现了一次。这是因为`UNION`自动去除了重复的行。 #### 3. 注意事项 - **性能差异**:`UNION ALL`比`UNION`执行速度快,因为它不...

    列表多行多列合并单元格

    可以考虑使用虚拟DOM技术,或者先在内存中处理好合并逻辑,再一次性更新DOM。 4. **兼容性问题**:虽然`colspan`和`rowspan`是HTML标准的一部分,但在老版本的浏览器中可能存在兼容性问题。确保在项目中测试所有...

    sql 多行合并某一列字符串拼接的示例

    4. **执行主查询**:最后,执行主查询,使用`GROUP BY`子句按合并条件对数据进行分组,确保每组数据只出现一次。 通过这种方式,我们可以有效地将多行数据转换为一行,同时在一个列中拼接所需的字符串值。这种方法...

    两个升序的数组A、B,将AB合并到C,保持升序,去除重生的元素

    在编程领域,数组的合并与排序是一个常见的操作,特别是在数据处理和算法...在实际项目中,这样的操作可能会出现在数据库查询合并、数据清洗、排序算法等多个场景。理解并熟练掌握这些技巧对提升编程能力非常有帮助。

    合并table的行

    然后重置`rowSpanNum`为1,准备处理下一次可能的合并。 #### 功能拓展与优化 虽然给定的代码片段提供了一个基本的行合并解决方案,但在实际应用中,我们可能还需要考虑以下几点: 1. **多列合并**:除了基于单列...

    C# 数据表(Dataset)操作 合并 查询一箩筐(源码)(批量数据导入导出数据库)

    在这个源码中,我们将深入探讨C#中数据表的操作,包括数据表的合并、数据的不重复插入、事务处理以及批量数据导入导出到数据库。 首先,让我们了解数据表(Dataset)的概念。数据表是一个内存中的数据结构,可以...

    Git分支合并和命令.docx

    这得益于Git内部对分支的实现机制——实际上每一个分支都只是一个简单的指针,指向某一次提交。因此,创建和切换分支的操作速度极快,极大地提高了团队协作效率,特别是在处理大型项目时。 **分支的优势**主要体现...

    oracle10g,9i多行合并一行函数

    3. **`GROUP BY name`**:按照`name`列进行分组,确保每个名字对应的课程列表只出现一次。 #### 二、Oracle 9i 多行合并为一行函数 在Oracle 9i中,由于`wm_concat()`函数尚未被引入,因此需要采用更复杂的方法来...

    VB合并多个结果集,合并记录集

    2. **打开单个结果集**:然后,为每个要合并的查询创建并执行SQL语句,打开记录集。例如,假设我们有顾客表(Customers)和雇员表(Employees): ```vb Dim conn As New ADODB.Connection conn.Open "Provider=...

    合并两个已经排序的数组为另一个数组算法

    这是因为每个元素最多只会被访问一次。 #### 知识点五:应用场景 1. **数据库查询优化**:在数据库系统中,处理大量已排序的数据时可以利用此算法进行快速合并,提高查询效率。 2. **文件系统管理**:在文件系统的...

    合并列值

    - `GROUP BY value` 是为了确保相同的值只出现一次。 4. **结果展示**:最终查询结果将显示所有 `value` 值被合并成一个字符串,其中不同的值之间用逗号分隔。 5. **清理资源**:使用 `DROP TABLE` 删除临时表 `...

    Access巧妙合并多个Excel文件.docx

    这就意味着你只需要设置一次联合查询,之后每次需要更新数据时,只需运行这个查询即可。 总的来说,使用Access来合并多个Excel文件是一种灵活、高效的方法,尤其适用于需要频繁更新和查看多源数据的情况。这种方法...

    Hive内部表合并小文件Java程序

    此外,对于大型数据集,可能需要分批合并,避免一次性处理过多文件导致内存溢出。 在实际应用中,我们还可以考虑利用Hive自身的`COMPACTION`功能,它可以自动合并相同分区下的小文件。但是,自动合并可能不适用于...

    用友培训课件:NC实施工具-NC57产品培训-合并报表.ppt

    逐级合并适用于大型、跨行业多种经营的集团化公司,一次性合并适用于集团公司合并报表产品总体介绍-合并方法及应用范围合并报表产品总体介绍-合并方法及应用范围合并报表产品总体介绍-合并方法及应用范围逐级合并...

    java多线程查询数据库

    每个实例可能代表一次数据库查询,包含具体的SQL语句和执行查询所需的参数。在`executeConcurrentQueries`中,这些`Runnable`对象会被提交到线程池进行执行。 ### 6. 并发控制与同步 在并发环境下,为了防止数据...

    Css背景图合并工具CssBgImageMergeTool

    这样只需要加载一次大图,就能显示多个图标,减少了网络请求。 2. **工具使用**:CssBgImageMergeTool.exe是一个可执行文件,用户可以将需要合并的背景图片添加到工具中,它会自动生成合并后的雪碧图以及相应的CSS...

Global site tag (gtag.js) - Google Analytics