草庐IT

MySQL水平连接两个查询

coder 2023-10-06 原文

我有一个查询可以正确地提取公司 A 的一系列目标和总工作时数。我想对公司 B 运行完全相同的查询并在一个共同的日期加入他们,该日期恰好按星期。我当前的查询:

SELECT * FROM (
  SELECT org, date,
         ( SELECT SUM( target ) FROM target WHERE org = "companyA" ) AS companyA_target,
         SUM( hours ) AS companyA_actual
  FROM time_management_system
  WHERE org = "companyA"
  GROUP BY WEEK( date )
  ORDER BY DATE
) q1

LEFT JOIN (
  SELECT org, date,
         ( SELECT SUM( target ) FROM target WHERE org = "companyB" ) AS companyB_target,
         SUM( hours ) AS companyB_actual
  FROM time_management_system
  WHERE org = "companyB"
  GROUP BY WEEK( date )
  ORDER BY DATE
) q2 

ON q1.date = q2.date

结果显示公司 A 的所有日期/信息,但公司 B 仅显示零星数据。另外,这两个查询将显示完全相同的一组日期,只是“目标”和“实际”列中的信息不同。

companyA    2012-01-28  105.00  39.00   NULL      NULL          NULL   NULL 
companyA    2012-02-05  105.00  15.00   NULL      NULL          NULL   NULL
companyA    2012-02-13  105.00  60.50   companyB  2012-02-13    97.50  117.50

知道为什么我没有获得 companyB 的所有信息吗?

作为旁注,有人能指出将每一行的周值转换为一列的方向吗? companyA 和 companyB 作为仅有的两行?

感谢所有帮助!谢谢。

最佳答案

由于目标表中没有明显的日期,所有周的总和将保持不变。因此,我使用 group by 仅对公司 A 和 B 的那些“org”值执行了预查询。这将确保每个“组织”只有 1 条记录,因此您不会得到笛卡尔结果。

然后,我为两家公司查询 time_management_system 一次。在现场计算中,我正在应用 IF() 来测试公司值(value)并在正确时应用。两者的 WEEK 事件在最终结果中是相同的,因此我不必单独进行并加入。这也避免了让日期列出现两次的需要。我也不需要显式添加 org 列名称,因为最终的列名称反射(reflect)了这一点。

SELECT
      WEEK( tms.date ) as GrpWeek,
      IF( tms.org = "companyA", TargetSum.CompTarget, 00000.00 )) as CompanyATarget,
      SUM( IF( tms.org = "companyA", tms.hours, 0000.00 )) as CompanyAHours,
      IF( tms.org = "companyB", TargetSum.CompTarget, 00000.00 )) as CompanyBTarget,
      SUM( IF( tms.org = "companyB", tms.hours, 000.00 )) as CompanyBHours
   from
      Time_Management_System tms
         JOIN ( select 
                      t.org,
                      SUM( t.target ) as CompTarget
                   from 
                      Target T
                   where
                      t.org in ( "companyA", "companyB" ) 
                   group by
                      t.org ) as TargetSums
            ON tms.org = TargetSums.org
   where 
      tms.org in ( "companyA", "companyB" )
   group by
      WEEK( tms.date )
   order by
      WEEK( tms.date )

关于MySQL水平连接两个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358018/

有关MySQL水平连接两个查询的更多相关文章

  1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

    我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

  2. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  3. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  4. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  5. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  6. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  7. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

  8. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  9. ruby - 具有两个参数的 block - 2

    我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋

  10. ruby - 我的 Ruby IRC 机器人没有连接到 IRC 服务器。我究竟做错了什么? - 2

    require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame

随机推荐