当前位置: 首页 > 面试题库 >

MYSQL sum()用于不同的行

寿阳华
2023-03-14
问题内容

我在SQL查询中使用sum()寻找帮助:

SELECT links.id, 
       count(DISTINCT stats.id) as clicks, 
       count(DISTINCT conversions.id) as conversions, 
       sum(conversions.value) as conversion_value 
FROM links 
LEFT OUTER JOIN stats ON links.id = stats.parent_id 
LEFT OUTER JOIN conversions ON links.id = conversions.link_id 
GROUP BY links.id 
ORDER BY links.created desc;

我使用它DISTINCT是因为我正在执行“分组依据”,这可以确保同一行不会被重复计数。

问题是SUM(conversions.value)对每行的“值”计数超过一次(由于分组依据)

我基本上想SUM(conversions.value)为每个DISTINCT conversions.id 做。

那可能吗?


问题答案:

我可能是错的,但据我了解

  • conversions.id* 是表 转换主键 *
  • stats.id* 是表 统计信息主键 *

因此,对于每个conversions.id,您最多影响一个link.id。

您的要求有点像做2组的笛卡尔积:

[clicks]
SELECT *
FROM links 
LEFT OUTER JOIN stats ON links.id = stats.parent_id

[conversions]
SELECT *
FROM links 
LEFT OUTER JOIN conversions ON links.id = conversions.link_id

对于每个链接,您将获得sizeof([clicks])x sizeof([conversions])行

如前所述,您可以通过以下方式获得请求中唯一身份转化的次数:

count(distinct conversions.id) = sizeof([conversions])

这种独特的方法可以删除笛卡尔积中的所有[clicks]行

但显然

sum(conversions.value) = sum([conversions].value) * sizeof([clicks])

就您而言,

count(*) = sizeof([clicks]) x sizeof([conversions])
count(*) = sizeof([clicks]) x count(distinct conversions.id)

你有

sizeof([clicks]) = count(*)/count(distinct conversions.id)

所以我会用

SELECT links.id, 
   count(DISTINCT stats.id) as clicks, 
   count(DISTINCT conversions.id) as conversions, 
   sum(conversions.value)*count(DISTINCT conversions.id)/count(*) as conversion_value 
FROM links 
LEFT OUTER JOIN stats ON links.id = stats.parent_id 
LEFT OUTER JOIN conversions ON links.id = conversions.link_id 
GROUP BY links.id 
ORDER BY links.created desc;

让我发布!杰罗姆



 类似资料:
  • 我是openNlp的新手。我开始训练一个模型(TokenNameFinderTrainer),以识别名称。到目前为止还不错,但现在我想识别组织(例如“Microsoft”)。 我的问题是:opennlp默认识别哪些类型的实体?(如果有的话...) 我看到它可以处理

  • 问题内容: 假设我是普通用户还是超级用户,我想显示不同的列。 覆盖在已经完全没有效果 并且定义条件类属性也不起作用(未定义)(根据上的错误)。在等效的中做同样的事情,仍然没有定义 仅供参考,可以是从前面提到的问题继承的任何类。 问题答案: 我通常定义视图类属性,例如属性。它允许你向其中添加一些动态逻辑: 使用这种方法的问题(以及为什么在函数中重新分配值不起作用)是许多视图属性在应用程序启动时被缓存

  • java-mx3g-cp“*”edu.stanford.nlp.pipeline.stanfordcorenlp-props stanfordcorenlp-spanish.properties 第二个命令打开一个终端和西班牙语解析器工作正常,但从服务器版本来看,它使用英语解析器,而不是西班牙语。 对于我使用的客户,wget--post-data'el presidente Julio Sanch

  • 我在一个Jpanel中有一个jbutton,它有FlowLayout和尾部对齐。这段代码实际上在ubuntu环境中工作,但当我在centos环境中运行它时,文本不适合按钮。 然后我添加以下几行: 这额外的线路有帮助,但看起来,解决方案并不好。

  • 问题内容: 我在Swing应用程序中使用JWebBrowser。此类属于DJ项目。它需要swt jar执行。现在,我已将Windows的swt jar包含在应用程序的jar包装中。我想知道如何在同一包装中包含用于Linux / Mac的swt jars?我正在使用ant来构建应用程序jar。我应该建立将不同的swt罐放入不同平台的罐吗? 问题答案: 如果您想要一个可以在不同平台(Win / Mac

  • 下面是一些简单的代码片段。 在火狐一切正常。 在Chrome中,我得到了“org.openqa.selenium.WebDriverException:未知错误:无法聚焦元素”错误 Safari不会对sendKeys()作出反应 我还尝试使用另一种方法: 此代码修复了Chrome错误,但浏览器仍然不会对事件 Safari和Firefox对sendKeys()也没有反应。 我无法理解正在发生什么,以