【问题标题】:Getting sum() on a different distinct row MySQL在不同的不同行 MySQL 上获取 sum()
【发布时间】:2010-07-17 16:10:28
【问题描述】:

我正在寻找关于这个问题的不同问题,但找不到我的问题的答案。

这是我的查询:

SELECT SUM( lead_value ) AS lead_value_sum, count( DISTINCT phone ) AS SUM, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8
GROUP BY t1.referer

我正在尝试总结唯一电话号码的lead_value 。计数(不同的电话)实际上有效,并为我提供了每个推荐人的唯一电话号码,但我似乎不明白我应该如何对每个推荐人的唯一电话号码的lead_value 求和。

如果你能给我任何帮助,我将不胜感激, 伊甸园

编辑:表结构

CREATE TABLE user_to_leads
 (
user_idINT(10) NOT NULL,
lead_idINT(10) NOT NULL,
site_idINT(10) NOT NULL,
lead_value INT(10) NOT NULL
 )

CREATE TABLE leads
 (
lead_id INT(100) NOT NULL auto_increment ,
site_id INT(10) NOT NULL ,
lead_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
vaild_date TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
referer VARCHAR(255) NOT NULL,
KEYWORD VARCHAR(255) NOT NULL,
upsaleINT(11) NOT NULL DEFAULT '0' ,
vaild INT(2) NOT NULL,
PRIMARY KEY (lead_id),
KEY lead_date (lead_date)
 )


CREATE TABLE leads_people_details
 (
lead_id INT(100) NOT NULL auto_increment ,
fullnameVARCHAR(255) NOT NULL,
phone VARCHAR(12) NOT NULL ,
email VARCHAR(255) NOT NULL,
homeVARCHAR(255) NOT NULL,
browser VARCHAR(255) NOT NULL,
browser_version VARCHAR(100) NOT NULL,
resolutionVARCHAR(255) NOT NULL,
IPVARCHAR(255) NOT NULL,
statusVARCHAR(255) NOT NULL DEFAULT '0',
COMMENT text NOT NULL,
PRIMARY KEY (lead_id)
 )

【问题讨论】:

  • 从 sql 中不清楚你想要实现什么:假设你有 3 个电话号码这样说:613-555-1001 613-555-1001 613-555-1001 613-555 -1002 613-555-1002 613-555-1003 那么你想得到 613-555-1001 lead_value_sum == 3; 613-555-1002 铅值总和 == 2、613-555-1001 铅值总和 == 1 ?
  • 对于特定的referer, phone 组合,您是否有不同的lead_value 号码,还是总是相同?如果不同,您想为 SUM 添加哪一项?以及您使用的是什么 RDBMS(它可能没有任何区别,但最好知道)。如果您告诉我们您的表格结构也会有所帮助。
  • 您好,感谢您的快速答复。 Elf King - SUM = 给我每个推荐人的唯一电话号码的数量。 Lead_value_sum = 给我每个推荐人的每个唯一电话号码附加的所有lead_value 的总和。现在它计算每个引荐来源的所有lead_value,即使有2行具有相同的电话号码。 Martin Smith:对于特定的referer,电话,lead_value 将始终相同,所以我不介意只选择第一个可用的lead_value。 RDBMS - 我正在使用 PHPMYADMIN,这是你的意思吗?
  • 事实上整个表的定义最好。
  • 嘿 Martin - 有没有一种首选的方式让我向您展示表格的结构?

标签: sql mysql sum distinct


【解决方案1】:

你说

对于特定的推荐人,电话, Lead_value 将始终相同

根据您提供的有限信息,我认为这应该返回正确的答案。如果您使用请求的信息更新您的问题,则可能会对其进行改进。

SELECT SUM(lead_value ) AS lead_value_sum, count(phone ) AS phone_count, referer
FROM
(
SELECT DISTINCT lead_value, phone, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8
) derived
GROUP BY referer

表结构发布后更新

我真的不明白为什么 leads_people_detailsleads 都有一个主键和你要加入的 lead_id 的 auto_increment 列?这意味着潜在客户和leads_people_details 之间存在1-1 的关系?如果是这样,其中一个可能不应该是 auto_increment 以避免 id 在您没有意识到的情况下不同步的可能性。

user_to_leads 表上也没有主键。 user_idlead_idsite_id 上应该有一个吗?此外,您当前没有按 that 表上的 siteid 进行过滤。这是故意的吗?如果不是这样,是否会阻止重复记录返回?如果不是,那么您能在该表中描述user_id 的重要性吗?您之前说过对于特定的referer,phonelead_value 将始终相同,它可以与user_id 不同吗?如果是,应该使用哪个?如果不是,为什么user_id 在该表中?

这里有一个可能更接近的临时查询,但上面仍有未解决的查询。

SELECT SUM(lead_value ) AS lead_value_sum, count(phone ) AS phone_count, referer
FROM leads t1
INNER JOIN leads_people_details t2 ON t1.lead_id = t2.lead_id
INNER JOIN user_to_leads t3 ON t1.lead_id = t3.lead_id  
               and t1.site_id = t3.site_id
WHERE lead_date
BETWEEN 20100716000000
AND 20100716235959
AND t1.site_id =8

【讨论】:

  • 嘿 Martin Smith,看来您的解决方案效果很好,至少对于这个特定的统计数据,我当然会检查更多。你能解释一下你到底做了什么吗? “FROM”是从您在查询中创建的表中选择的吗?什么是派生的? :) 非常感谢您的帮助,伊甸园
  • @Eden - 实际上我只需要知道每个表中的列。目前它会带回重复项,然后以不同的方式删除它们。我希望我应该能够摆脱这一步并使事情变得更有效率。派生位指派生表。它就像一个内联视图。
  • 你是对的——leads_people_details 不必是 auto_increment,每次我插入人员详细信息时,我都会使用刚刚添加到潜在客户中的lead_id,所以它们总是相同的。 user_to_leads - 我必须有一个主键?那我应该用哪一个?每个lead_id 都附加到一个user_id(有时甚至超过1),告诉我要引导的用户被“附加”到哪个用户。每个 user_id 都有不同的lead_value,因此对于您的下一个问题 - 相同的推荐人和电话将始终是相同的lead_value,但它会因不同的 user_id 而不同,每个 user_id 都会给出不同的lead_value。
  • 继续我的消息:我不明白您的新查询如何解决同一站点的 2 行(示例 - 8),在 people_details 表中它具有相同的电话 - 它在哪里过滤双如果它在同一个网站上,电话?
  • @Eden - 但你没有加入 userid 任何东西。这意味着在这种情况下 referer,phone 在您刚刚描述的情况下,查询中的 lead_value 会有所不同。此外,user_to_leads 中的site_id 的值是否与leads 中相应的site_id 有任何不同?
猜你喜欢
  • 2011-01-27
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2018-06-09
相关资源
最近更新 更多