Mysql 用于对所有不同值求和的SQL查询
我有一个表,其中包含有关市场的信息:Mysql 用于对所有不同值求和的SQL查询,mysql,sql,Mysql,Sql,我有一个表,其中包含有关市场的信息: market_id | cashier_id | storekeeper_id m1 | c1 | s1 m1 | c1 | s2 m1 | c1 | s9 m1 | c2 | s3 m2 | c7 | s5 m2 | c8 | s6 我还有收银台: cashier_id |
market_id | cashier_id | storekeeper_id
m1 | c1 | s1
m1 | c1 | s2
m1 | c1 | s9
m1 | c2 | s3
m2 | c7 | s5
m2 | c8 | s6
我还有收银台:
cashier_id | salary
c1 | 1100
c2 | 1100
c3 | 1100
c7 | 1220
c8 | 1150
和桌子管理员:
storekeeper_id | salary
s1 | 1000
s2 | 1000
s3 | 1000
s5 | 1050
s6 | 1100
s9 | 1100
我想写一个查询,查找每个市场的工资汇总(收银员和店主)。
结果应该是:
m1 6300
m2 4520
我尝试将表市场与其他两个表结合起来,并在工资上使用
SUM(DISTINCT)
,但这不包括相同工资的员工。我还有别的办法吗 你有一个非常非常糟糕的数据模型,除非你的意图是说一个给定的出纳在一个市场中工作多次
也就是说,你可以从数据中得到你想要的东西union all
是您的朋友:
select m.market_id, sum(salary)
from ((select distinct m.market_id, c.cashier_id, NULL as storekeeper_id, c.salary
from markets m join
cashiers c
on c.cashier_id = m.cashier_id
) union all
(select distinct m.market_id, NULL, s.storekeeper_id, s.salary
from markets m join
storekeepers s
on s.storekeeper_id = m.storekeeper_id
)
) m
group by m.market_id
您可以使用
UNION
组合出纳和店主工资。从那里,一个简单的分组将获得您想要的内容
SELECT market_id, SUM(salary)
FROM (SELECT m.market_id, c.cashier_id, c.salary
FROM market m
INNER JOIN cashier c ON c.cashier_id = m.cashier_id
UNION
SELECT m.market_id, s.storekeeper_id, s.salary
FROM market m
INNER JOIN storekeeper s ON s.storekeeper_id = m.storekeeper_id) tmp
GROUP BY market_id
你用什么公式计算m1和m2的结果?我把每个商店的出纳工资和店主工资加起来,为什么m2=4250?取而代之的是1220+1150+1100+1100=4570其1220+1150+1050+1100=4520不,出纳只为单一市场工作一次。但是为了说一家商店的店主比收银员多,我必须重复一下收银员的身份。
SELECT market_id, SUM(salary)
FROM (SELECT m.market_id, c.cashier_id, c.salary
FROM market m
INNER JOIN cashier c ON c.cashier_id = m.cashier_id
UNION
SELECT m.market_id, s.storekeeper_id, s.salary
FROM market m
INNER JOIN storekeeper s ON s.storekeeper_id = m.storekeeper_id) tmp
GROUP BY market_id
SELECT k.mid, (sum(k.cs) + sum(k.s_sum))
from (SELECT market_id as mid, market.cashier_id as cid,
cashier.salary as cs, sum(storekeeper.salary) as s_sum
((from markets inner join cashier on markets.cashier_id=cashier.cashier_id)
inner join storekeeper on markets.storekeeper_id=storekeeper.storekeeper_id)
group by markets.market_id,cashier.cashier_id) as k
group by k.mid;