我正在努力编写一个查询,返回一个字段中的值之和。如果在另外两个字段中有多行具有相同的值,我只需求和一次,如果有,则求和所有值
我有一个包含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表中创建的一个测试数据库来解决这个任务。
谢谢你的建议。
2条答案
按热度按时间vpfxa7rd1#
groupby是aggreated result,所以在您的情况下,或者您只需要子查询结果,就不需要groupby了
或者您应该添加聚合函数,例如:
或者ypu必须在y组中提到聚合函数不涉及的列
shyt4zoc2#
由于没有看到您实际想要从这些数据中产生什么结果,您的问题目前相当模糊。
我个人的解释是你想要
active users
每列UTM Source
. 但是,如果多行完全匹配,则只能包含一次。反过来说,那是两个步骤。。。
消除重复数据
聚合数据
这给了我以下。。。
编辑:
我确实想知道问题陈述是否遗漏了一些信息?为什么会这样
UTM Source
有相同的Company ID
有多个不同数量的Active Users
?是否有其他栏目未提及?
例如,可能有一个日期字段?在这种情况下,您可能真的需要找到最近日期的记录?
更多的信息会很有帮助(编辑您的问题),关于您需要这样做的原因/您试图实现的目标,以及您希望从给定的示例数据生成的确切结果。
(另外,请不要链接到谷歌文档,将所有数据作为文本包含在您的问题中,堆栈溢出在编辑器中具有合适的文本格式,这意味着如果您稍后删除该页,该问题将不会“中断”。)