mysql update,2个表,把第一个表中所有满足条件的字段值(金额),加总到另一个表的总金额里
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql update,2个表,把第一个表中所有满足条件的字段值(金额),加总到另一个表的总金额里相关的知识,希望对你有一定的参考价值。
表A 有字段、id,金额,状态,时间
表B 有字段、id,总金额(只有一行内容)
要求,把表A中满足条件的所有金额,全部加总到B表的总金额里
如下:
A 001 10 T 2016-08-28 10:30:20
002 10 F 2016-08-30 16:00:20 满足条件
003 20 F 2016-09-25 10:30:20 满足条件
004 20 F 2016-10-28 10:30:20
B 001 10
把A表(时间小于当前时间且状态为F)的金额全部加总到B表总金额里,感谢!
update B,
(select sum(金额) as n from A
where 状态='F' and 时间<now()) t
set B.总金额=t.n;本回答被提问者和网友采纳
使用 3 个表中的数据查找总行数,MySQL
【中文标题】使用 3 个表中的数据查找总行数,MySQL【英文标题】:Find total number of rows using data from 3 tables, MySQL 【发布时间】:2014-01-15 14:25:18 【问题描述】:我想返回一个数字,但查询需要覆盖 3 个表,我想! 这是一个简单的例子,说明这 3 个表的情况(剪掉了几列)
table: opencall
---------------------------------
Users name | Site | Phone |
---------------------------------
John Smith | Leeds | 0113 1234567
table: userdb
-------------------------------------
emailAd | site | company |
-------------------------------------
user@domain.com | Leeds | Yorks Post
table: company
----------------------------
pk_company_id | division_name |
----------------------------
Yorks Post | NORTH
现在,我要做的是在 opencall 中找到“division_name”为“NORTH”的总行数,我尝试了一些查询,但它们总是返回一个太大的数字。
这是我尝试过的一个示例:
SELECT count(*) FROM opencall, company, userdb WHERE userdb.site = opencall.site AND userdb.company = company.pk_company_id AND opencall.logdatex BETWEEN 1385041200 and 1388041200 AND opencall.condition NOT IN (8,9,11,12,19) AND company.division_name = 'NORTH`'
但是,这会返回超过 8,000 的结果,就像我刚刚输入的那样:
SELECT count(*) FROM opencall where logdatex BETWEEN 1385041200 and 1388041200 AND condition NOT IN (8,9,11,12,19)
这将返回 128,因此我在限制 Division_name 时所追求的数字应该在 20 左右。对此的任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:你的数据结构搞砸了。公司和部门之间没有联系。您可以使用聚合从userdb
创建一个。我认为这可以满足您的要求:
SELECT count(*)
FROM (select distinct site, company
from userdb u
) u join
opencall o
on u.site = o.site join
company c
on u.company = c.pk_company_id
WHERE o.logdatex BETWEEN 1385041200 and 1388041200 AND
o.condition NOT IN (8,9,11,12,19) AND
c.division_name = 'NORTH`;
【讨论】:
我收到此错误,但我无法弄清楚它的错误所在 - 您的 SQL 语法有错误。检查与您的 MySQL 服务器版本相对应的手册,以了解在 'select distinct site, company from useredb u) u j 附近使用的正确语法 @Maff 。 . .userdb
拼写错误。【参考方案2】:
试试这个:
SELECT COUNT(DISTINCT oc.UsersName)
FROM opencall oc
INNER JOIN userdb u ON oc.site = u.site
INNER JOIN company c ON u.company = c.pk_company_id
WHERE c.division_name = 'NORTH'AND oc.logdatex BETWEEN 1385041200 AND 1388041200 AND
oc.condition NOT IN (8,9,11,12,19)
【讨论】:
谢谢!效果很好,因为我还在学习,除了不同的部分我都明白了,你能解释一下这是做什么的吗? @Maff 不客气。我刚刚添加了COUNT(DISTINCT oc.UsersName)
而不是COUNT(*)
,因为我们想找到特定部门的用户总数。所以我从opencall
表中计算了不同的用户以上是关于mysql update,2个表,把第一个表中所有满足条件的字段值(金额),加总到另一个表的总金额里的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL:我想用另一个表中的值更新表中的所有行,其中第一个表中的值等于第二个表