jjzjj

mysql - 与 Count 合并或与 Sum 合并 - MySQL

coder 2023-10-24 原文

我想在一个查询中组合三个表 - 日期、潜在客户和点击。

表格如下所示:

日期:

|date|

铅:

id|time|commission

点击:

id|time|commission

表格日期只是存储日期,在没有点击或引导的情况下获取日期时使用。

所以如果我们在表中有以下数据:

日期:

2009-06-01
2009-06-02
2009-06-03

铅:

1|2009-06-01|400
2|2009-06-01|300
3|2009-06-03|350

点击:

1|2009-06-01|1
2|2009-06-03|2
3|2009-06-03|2
4|2009-06-03|0

我想获取日期、点击次数、点击产生的佣金(有些点击不给佣金)、潜在客户数量、潜在客户产生的佣金和总佣金。因此,对于上面的表格,我想得到:

2009-06-01|1|1|2|700|701|
2009-06-02|0|0|0|0|0
2009-06-03|3|4|1|350|354|

我尝试过以下联合:

 SELECT  
    campaign_id, 
    commission_date,  
    SUM( click_commission ) AS click_commission,
    click,
    SUM( lead_commission ) AS lead_commission ,  
    lead,
    SUM( total_commission ) as total_commission
    FROM(
        SELECT  
            click.campaign_id AS campaign_id, 
            DATE( click.time ) AS commission_date, 
            click.commission AS click_commission, 
            (SELECT count(click.id) from click GROUP BY date(click.time)) as click,
            0 as lead_commission,
            0 as lead,
            click.commission AS total_commission
        FROM click
        UNION ALL
        SELECT 
            lead.campaign_id AS campaign_id, 
            DATE( lead.time ) AS commission_date, 
            0 as click_commission,
            0 as click,
            lead.commission AS lead_commission, 
            lead.id as lead,
            lead.commission AS total_commission
        FROM lead
        UNION ALL
        SELECT 
            0 AS campaign_id, 
            date.date AS commission_date, 
            0 AS click_commission, 
            0 as click,
            0 AS lead_commission, 
            0 as lead,
            0 AS total_commission
        FROM date 
    ) AS foo 
    WHERE commission_date BETWEEN '2009-06-01' AND '2009-07-25' 
    GROUP BY  commission_date 
    ORDER BY commission_date LIMIT 0, 10

但这并不能同时计算点击次数和潜在客户数量,上面的代码在所有潜在客户上给出了正确的点击量 bot 0。如果我四处移动代码并从潜在客户表中进行选择,我会在所有点击中获得正确的潜在客户机器人 0。我一直无法找到一种方法来从查询中获取这两个计数。

所以我尝试了左连接:

SELECT
    date.date as date, 
    count( DISTINCT click.id ) AS clicks, 
    sum(click.commission) AS click_commission, 
    count( lead.id ) AS leads, 
    sum(lead.commission) AS lead_commission
FROM date
LEFT JOIN click ON ( date.date = date( click.time ) )
LEFT JOIN lead ON ( date.date = date( lead.time ) )
GROUP BY date.date
LIMIT 0 , 30 

此查询的问题是,如果在某个日期有多次点击或潜在客户,它将返回预期值 * 2。因此,在 2009 年 6 月 1 日,它将返回 1400,而不是潜在客户佣金的预期 700。

所以在 UNION 中,我的计数有问题,在左连接中,SUM 不起作用。

如果可能的话,我真的很想坚持使用 UNION,但我还没有找到从中获得这两个计数的方法。

(这是对 this 较早问题的跟进,但由于我没有要求其中的计数,所以我发布了一个新问题。)

最佳答案

SELECT  date,
        COALESCE(lcomm, 0), COALESCE(lcnt, 0),
        COALESCE(ccomm, 0), COALESCE(ccnt, 0),
        COALESCE(ccomm, 0) + COALESCE(lcomm, 0),
        COALESCE(ccnt, 0) + COALESCE(lcnt, 0)
LEFT JOIN
        (
        SELECT  date, SUM(commission) AS lcomm, COUNT(*) AS lcnt
        FROM    leads
        GROUP BY
                date
        ) l
ON      l.date = d.date
LEFT JOIN
        (
        SELECT  date, SUM(commission) AS ccomm, COUNT(*) AS ccnt
        FROM    clicks
        GROUP BY
                date
        ) с
ON      c.date = d.date
FROM    date d

关于mysql - 与 Count 合并或与 Sum 合并 - MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1099040/

有关mysql - 与 Count 合并或与 Sum 合并 - MySQL的更多相关文章

  1. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

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

  3. git使用常见问题(提交代码,合并冲突) - 2

    文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

  4. Ruby 哈希直接访问与合并 - 2

    有什么区别:@attr[:field]=new_value和@attr.merge(:field=>new_value) 最佳答案 如果您使用的是merge!而不是merge,则没有区别。唯一的区别是您可以在合并参数中使用多个字段(意思是:另一个散列)。例子:h1={"a"=>100,"b"=>200}h2={"b"=>254,"c"=>300}h3=h1.merge(h2)putsh1#=>{"a"=>100,"b"=>200}putsh3#=>{"a"=>100,"b"=>254,"c"=>300}h1.merge!(h2)pu

  5. ruby-on-rails - 无法安装 mysql2 0.3.14 gem - 2

    我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby​​目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin

  6. ruby - 如何使用 ruby​​ mysql2 执行事务 - 2

    我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi

  7. ruby - 在两个 ActiveRecord 类之间合并/复制属性的好方法? - 2

    之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote

  8. ruby - 合并 nanoc 中的项目 - 2

    我一直在尝试使用nanoc用于生成静态网站。我需要组织一个复杂的排列页面,我想让我的内容保持干燥。包含或合并的概念在nanoc系统中如何运作?我已阅读文档,但似乎找不到我想要的内容。例如:我如何获取两个部分内容项并将它们合并到一个新的内容项中。在staticmatic您可以在您的页面中执行以下操作。=partial('partials/shared/navigation')类似的约定在nanoc中如何运作? 最佳答案 这里是nanoc的作者。在nanoc中,部分是布局。因此,您可以拥有layouts/partials/shared/

  9. ruby-on-rails - 当我通过 rvm 使用 rails3 时,如何在 ubuntu 上安装 mysql2 gem? - 2

    我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。

  10. ruby-on-rails - Rails 合并两个哈希数组? - 2

    我很难理解我需要合并两个哈希数组的逻辑,看来我已经问过hisquestionawhileback以不同的方式,我还尝试了其他一些方法,例如此处提供的答案:mergingarraysofhashes任何形式的帮助理解这对我来说都是非常有帮助的。假设我有以下数组,这是方法本身的输出,所以你可以想象那些:timestamp是Time对象[{:timestamp=>2011-12-1900:00:00UTC},{:timestamp=>2011-12-1901:00:00UTC},{:timestamp=>2011-12-1902:00:00UTC},{:timestamp=>2011-12-

随机推荐