gpt4 book ai didi

MySQL获取按用户工作位置分组的余额SUM

转载 作者:行者123 更新时间:2023-11-29 08:07:52 25 4
gpt4 key购买 nike

我正在尝试获取特定月份内所有用户余额的总和,并按用户所在区域进行分组,这取决于他们所在的销售点。

平衡

  • id_balance
  • 日期
  • id_user
  • 值(value)($$$)

用户

  • id_user
  • id_pos
  • 姓名(不相关)

pos(销售点)

  • id_pos
  • id_region
  • 姓名(不相关)

location_region

  • id_region
  • 名称(佛罗里达州、德克萨斯州等)

基本上,我需要它来呈现这些数据(按月过滤):

location_region.name | SUM(balance.value)
---------------------|-------------------
Florida | 45730
Texas | 43995

我尝试了一些方法,但没有成功。这是我最接近的尝试。

SELECT location_region.name, SUM(balance.value) AS money
FROM balance
LEFT JOIN user ON user.id_user
LEFT JOIN pos ON pos.id_pos = user.id_pos
LEFT JOIN location_region ON location_region.id_region = pos.id_region
WHERE balance.date BETWEEN '2014-02-01' AND DATE_ADD('2014-02-01', INTERVAL 1 MONTH)
GROUP BY location_region.id_region
ORDER BY money DESC

有什么想法吗?谢谢!

最佳答案

您当前的查询存在逻辑错误,余额表和用户表之间的 JOIN 条件不完整(缺少 balance.id_user)。因此,您应该使用 balance LEFT JOIN user ON user.id_user=balance.id_user,而不是 balance LEFT JOIN user ON user.id_user。这导致 JOINed 表具有更多行(余额中的行数乘以用户表中的行数)。所以最终的 SUM 带来的值(value)太高了。

我对您的示例数据尝试了以下查询(我更改了一些值),它似乎工作正常:

SELECT location_region.name, SUM(balance.value) AS money
FROM balance
LEFT JOIN user USING(id_user)
LEFT JOIN pos USING(id_pos)
LEFT JOIN location_region USING(id_region)
WHERE balance.date BETWEEN '2014-02-01' AND DATE_ADD('2014-02-01', INTERVAL 1 MONTH)
GROUP BY location_region.id_region
ORDER BY money DESC

工作演示:http://sqlfiddle.com/#!2/dda28/3

关于MySQL获取按用户工作位置分组的余额SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22348673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com