两个不同字段中具有相同值的不同值之和,以及两个不同字段中具有不同值的所有值之和

fdbelqdn  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(330)

我正在努力编写一个查询,返回一个字段中的值之和。如果在另外两个字段中有多行具有相同的值,我只需求和一次,如果有,则求和所有值
我有一个包含3个字段的表:
utm源
公司id
活跃用户
如果 UTM Source 以及 Company ID 我需要计算不同的值 Active users 如果 UTM Source 以及 Company ID 不同的是我需要计算 Active users 以下是示例表:https://docs.google.com/spreadsheets/d/1jytu0_ydunlfxags_kvz8m3ubpknkvqwgxre6r10p6i/edit?usp=sharing
我设法写了这个查询:

SELECT  DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users
FROM customers
GROUP BY `UTM Source`, `Company ID`) AS customers_2`

我几乎得到了我需要的,因为它只返回一行 UTM Source 字段中值为9的电子邮件 Active users . 现在我还是要总结一下 UTM Source 所以我尝试了这个查询:

SELECT `UTM Source`, `Users`
FROM (
     SELECT  DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users
     FROM customers
     GROUP BY `UTM Source`, `Company ID`) AS customers_2
GROUP BY `UTM Source`

但我收到了一些错误:
select列表的表达式#2不在group by子句中,它包含未聚合的列“customers#2.users”,该列在功能上不依赖于group by子句中的列;这与sql\u mode=only\u full\u group by不兼容
我已经检查了那个线程,但我不太明白,因为我是新的数据库。我在mac上使用mamp,MySQL5.27.6和sequel pro,这只是我从收到的xls表中创建的一个测试数据库来解决这个任务。
谢谢你的建议。

vpfxa7rd

vpfxa7rd1#

groupby是aggreated result,所以在您的情况下,或者您只需要子查询结果,就不需要groupby了

SELECT `UTM Source`, `Users`
FROM (
     SELECT  DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users
     FROM customers
     GROUP BY `UTM Source`, `Company ID`)  customers_2

或者您应该添加聚合函数,例如:

SELECT `UTM Source`, sum(`Users`)
FROM (
     SELECT  DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users
     FROM customers
     GROUP BY `UTM Source`, `Company ID`)  customers_2
GROUP BY `UTM Source`

或者ypu必须在y组中提到聚合函数不涉及的列

SELECT `UTM Source`, `Users` , count(*)
FROM (
     SELECT  DISTINCT `UTM Source`, `Company ID`, SUM(DISTINCT `Active users`) as Users
     FROM customers
     GROUP BY `UTM Source`, `Company ID`)  customers_2
GROUP BY `UTM Source`,  `Users`
shyt4zoc

shyt4zoc2#

由于没有看到您实际想要从这些数据中产生什么结果,您的问题目前相当模糊。
我个人的解释是你想要 active users 每列 UTM Source . 但是,如果多行完全匹配,则只能包含一次。
反过来说,那是两个步骤。。。
消除重复数据
聚合数据
这给了我以下。。。

SELECT
  `UTM Source`,
  SUM(`Active Users`)   AS Users
FROM
(
  SELECT DISTINCT
    `UTM Source`,
    `Company ID`,
    `Active Users`
  FROM
    customers
)
  deduplicated_data
GROUP BY
  `UTM Source`

编辑:
我确实想知道问题陈述是否遗漏了一些信息?为什么会这样 UTM Source 有相同的 Company ID 有多个不同数量的 Active Users ?
是否有其他栏目未提及?
例如,可能有一个日期字段?在这种情况下,您可能真的需要找到最近日期的记录?
更多的信息会很有帮助(编辑您的问题),关于您需要这样做的原因/您试图实现的目标,以及您希望从给定的示例数据生成的确切结果。
(另外,请不要链接到谷歌文档,将所有数据作为文本包含在您的问题中,堆栈溢出在编辑器中具有合适的文本格式,这意味着如果您稍后删除该页,该问题将不会“中断”。)

相关问题