Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 用于对所有不同值求和的SQL查询_Mysql_Sql - Fatal编程技术网

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;