MySql SUM 和 JOIN

标签 mysql jsp

我正在尝试计算销售代理列表的销售额,此计数每隔几分钟进行一次,并更新显示“销售排行榜”的屏幕,该屏幕是在后台使用 Ajax 调用进行更新的。

我有一个每晚创建并填充的表,其中包含 agent_id 以及一周和一个月的总销售额。我创建了第二个临时表,用于计算当天的销售额。

我需要结合这两个表来创建 agent_count 中所有代理的当前销售列表。

表agent_count;

agent_id (varchar),
team_id (varchar),
name (varchar),
day(int),
week(int), 
month(int)

表销售;

agent_id (varchar),
day(int)

我不知道如何组合这些表格。我想我需要使用连接,因为必须返回所有代理 - 即使它们没有出现在 agent_count 表中。

首先,我进行了一个简单的调用,以获取所有代理的周和月总计

SELECT agent_id, team_id, name, week, month FROM agent_count;

我为今天的销售额创建了一个临时表,然后我计算了当天每个代理的销售额

CREATE TEMPORARY TABLE temp_todays_sales
SELECT s.id, s.agent_id
FROM sales s 
WHERE DATEDIFF(s.uploaded, NOW()) = 0 
AND s.valid = 1;

SELECT tts.agent_id, COUNT(tts.id) as today 
FROM temp_todays_sales tts
GROUP BY tts.agent_id;

什么是最好/最简单的方法来组合这些以最终得到一个结果集,例如

agent_id, team_id, name, day, week, month

其中周和月还包括每日总计

感谢您的帮助!

克里斯蒂

最佳答案

SELECT  s.agent_id, ac.team_id, ac.name,
        s.`day` + COALESCE(ac.`day`, 0) AS `day`,
        s.`day` + COALESCE(ac.`week`, 0) AS `week`,
        s.`day` + COALESCE(ac.`month`, 0) AS `month`
FROM    sales s
LEFT JOIN
        agent_count ac
ON      ac.agent_id = s.agent_id

team_idname将是 NULL如果agent_count中没有记录代理人。

如果两个表中都可能缺少代理,您通常需要制作一个 FULL JOIN但自 MySQL不支持后者,您可以使用它的穷人替代品:

SELECT  agent_id, MAX(team_id), MAX(name),
        SUM(day), SUM(week), SUM(month)
FROM    (
        SELECT  agent_id, NULL AS team_id, NULL AS name, day, day AS week, day AS month
        FROM    sales
        UNION ALL
        SELECT  *
        FROM    agent_count
        ) q
GROUP BY
        agent_id

关于MySql SUM 和 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5702501/

相关文章:

javascript - 从数据库逗号分隔的列中获取所有值并将其放入文本字​​段中

Sql:模拟参数化 LIMIT

mysql - 两者之间如何选择?

mysql - 查找 2 个表/记录集 MySQL 中的差异

java - 自定义标签 'cannot be resolved to a type'

java - JSF ValueChangeListener 不工作

java - 为什么 eclipse jsp 编辑器无法解析单独 scriptlet 中的 java block 注释?

mysql - 你会如何整理这个 Mysql 逻辑

java - jsp中如何访问静态 boolean 变量

javascript - 如何在 MVC portlet 中通过 JavaScript 重定向到另一个 JSP 页面?