草庐IT

mysql - MySql 中每个组的加入项目数

coder 2023-10-24 原文

我需要获得一组结果,显示每个“esta”组累积的项目数。

我按机构对结果进行分组。

设施内部连接到基地。

左连接的项目在底部连接。

所以在 Esta 组 2 中,假设有 3 个基本 ID。附加到基本 ID 的每条书面和口头记录都将计入结果集中的那个 esta。 每个基本记录可以附加多个“书面”或“口头”。

我在数据库中有 6 条口头记录和 4 条书面记录,它们分布在不同的“esta”记录中。在我的查询中,它们都计入我得到的结果的第一行。

我已经对更多的数据进行了相同的尝试,并且不管“esta”如何,第一行都包含每个左连接的元素一起计数。

SQL:

SELECT 
     esta.enf_esta_id
     ,SUM(IF(verbal.enf_verbal_id is not null,1,0)) as verbals
     ,SUM(IF(written.enf_written_id is not null,1,0)) as writtens
FROM 
     enf_base base
          INNER JOIN enf_esta esta ON esta.enf_esta_id = base.enf_esta_id
          LEFT JOIN enf_verbal verbal ON verbal.enf_base_id = base.enf_base_id
          LEFT JOIN enf_written written ON written.enf_base_id = base.enf_base_id
WHERE 
     1=1
GROUP BY 
     esta.enf_esta_id

结果:

enf_esta_id verbals writtens
2           10      10
3           1       0
4           1       1
6           0       0

为了证明第一行是不正确的,这里是从 enf_esta_id 2 中获取口头和书面结果。

SELECT 
     COUNT( * ) AS total
FROM 
     enf_written
         INNER JOIN enf_base ON enf_base.enf_base_id = enf_written.enf_base_id
         INNER JOIN enf_esta ON enf_base.enf_esta_id = enf_esta.enf_esta_id
WHERE 
     enf_esta.enf_esta_id =2

产量:

5

与 enf_verbal 相同,结果为 2。如果我们对问题查询结果的第一行进行折扣,则将每个的总数相加得到正确的 10。

谁能帮我得到我需要的结果?

最佳答案

你正在成倍增加。假设有 2 个口头的和 5 个书面的,那么你的连接会产生这 10 个记录(即所有组合)。而不是连接表然后聚合,你应该先聚合然后加入你的聚合。在您的情况下,这是每个基本 ID 的聚合,您最终将进一步聚合以获得 estas。

select 
  base.enf_esta_id,
  coalesce(sum(verbal.cnt), 0) as verbals,
  coalesce(sum(written.cnt), 0) as writtens
from enf_base base 
left join
(
  select enf_base_id, count(*) as cnt
  from enf_verbal
  group by enf_base_id
) verbal on verbal.enf_base_id = base.enf_base_id
left join
(
  select enf_base_id, count(*) as cnt
  from enf_written
  group by enf_base_id
) written on written.enf_base_id = base.enf_base_id
group by base.enf_esta_id;

关于mysql - MySql 中每个组的加入项目数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37458731/

有关mysql - MySql 中每个组的加入项目数的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby - 如何离开加入Arel? - 2

    Arel3.0.2提供了两个类来指定连接类型:Arel::Nodes::InnerJoin和Arel::Nodes::OuterJoin并使用InnerJoin默认。foo=Arel::Table.new('foo')bar=Arel::Table.new('bar')foo.join(bar,Arel::Nodes::InnerJoin)#innerfoo.join(bar,Arel::Nodes::OuterJoin)#outerfoo.join(bar,???)#left如果要生成左连接,如何连接两个表? 最佳答案 你可以使用

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  5. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  6. 使用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

  7. ruby - 鸭子输入字符串、符号和数组的优雅方式? - 2

    这是针对我无法破坏的现有公共(public)API,但我确实希望对其进行扩展。目前,该方法采用字符串或符号或任何其他在作为第一个参数传递给send时有意义的内容我想添加发送字符串、符号等列表的功能。我可以只使用is_a吗?数组,但还有其他发送列表的方法,这不是很像ruby​​。我将调用列表中的map,所以第一个倾向是使用respond_to?:map。但是字符串也会响应:map,所以这行不通。 最佳答案 如何将它们全部视为数组?String的行为与仅包含String的Array相同:deffoo(obj,arg)[*arg].eac

  8. ruby - 将n维数组的每个元素乘以Ruby中的数字 - 2

    在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c

  9. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  10. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

随机推荐