SQL - 对不同行求和
SQL - SUM different rows
我想对链接到另一个 table 的价格求和。
我试试这个查询:
SELECT COUNT(cmd.mt14),
SUM(cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
结果是:
count(cmd.mt14) sum(cmd.mt14)
100 170704,188
这不好,因为它对所有因左连接而去重的行求和。
如果我尝试 "unique" :
SELECT count(unique cmd.mt14),
sum(unique cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
结果:
count(unique cmd.mt14) sum(unique cmd.mt14)
54 57724,554
问题是这也是错误的,因为 sum 函数不会对所有价格求和,只会对唯一价格求和。
如何根据不同的列对所有价格求和?
非常感谢
如果我尝试获取行并对 excel 上的所有行求和,我有:
count sum
58 58492.503
您的第二个 "LEFT JOIN" 必须始终得到满足,因为您在 WHERE 子句中使用了其中一列。而且您根本没有使用 IND table。那么为什么不只是:
SELECT count(cmd.mt14),
sum(cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
WHERE lot.gpirole = 'B2029005'
如果这不是您要查找的内容,那么您可能只是想验证您的 CMD 是否存在于特定批次中:
SELECT count(cmd.mt14),
sum(cmd.mt14)
FROM g_piece cmd
WHERE EXISTS (select 1 from g_piece lot
where lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005')
我看到两个问题:
- 您的 where 子句使您的左连接成为内部连接,因此将限制移动到连接,或将左连接更改为内部连接。
- 聚合数据时,如果您不希望包含重复项,则必须在连接发生之前获取总和,因此子查询。
。
SELECT count_mt14, sum_mt14
FROM (SELECT count(cmd.mt14) count_mt14, sum(mt14) sum_mt14, Liebelle_20_1
FROM g_Piece group by liebelle_20_1) cmd
LEFT JOIN g_individu ind
ON ind.refindividu = cmd.LIBELLE_20_1
LEFT JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
非常感谢你的帮助,我终于完成了这个查询:
SELECT SUM(comm.mt14),
COUNT(comm.refpiece)
FROM
(
SELECT UNIQUE cmd.refpiece,
cmd.mt14
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
WHERE lot.gpirole = 'B2029005'
) comm
我想对链接到另一个 table 的价格求和。
我试试这个查询:
SELECT COUNT(cmd.mt14),
SUM(cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
结果是:
count(cmd.mt14) sum(cmd.mt14)
100 170704,188
这不好,因为它对所有因左连接而去重的行求和。 如果我尝试 "unique" :
SELECT count(unique cmd.mt14),
sum(unique cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
结果:
count(unique cmd.mt14) sum(unique cmd.mt14)
54 57724,554
问题是这也是错误的,因为 sum 函数不会对所有价格求和,只会对唯一价格求和。
如何根据不同的列对所有价格求和?
非常感谢
如果我尝试获取行并对 excel 上的所有行求和,我有:
count sum
58 58492.503
您的第二个 "LEFT JOIN" 必须始终得到满足,因为您在 WHERE 子句中使用了其中一列。而且您根本没有使用 IND table。那么为什么不只是:
SELECT count(cmd.mt14),
sum(cmd.mt14)
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
WHERE lot.gpirole = 'B2029005'
如果这不是您要查找的内容,那么您可能只是想验证您的 CMD 是否存在于特定批次中:
SELECT count(cmd.mt14),
sum(cmd.mt14)
FROM g_piece cmd
WHERE EXISTS (select 1 from g_piece lot
where lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005')
我看到两个问题:
- 您的 where 子句使您的左连接成为内部连接,因此将限制移动到连接,或将左连接更改为内部连接。
- 聚合数据时,如果您不希望包含重复项,则必须在连接发生之前获取总和,因此子查询。
。
SELECT count_mt14, sum_mt14
FROM (SELECT count(cmd.mt14) count_mt14, sum(mt14) sum_mt14, Liebelle_20_1
FROM g_Piece group by liebelle_20_1) cmd
LEFT JOIN g_individu ind
ON ind.refindividu = cmd.LIBELLE_20_1
LEFT JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
AND lot.gpirole = 'B2029005'
非常感谢你的帮助,我终于完成了这个查询:
SELECT SUM(comm.mt14),
COUNT(comm.refpiece)
FROM
(
SELECT UNIQUE cmd.refpiece,
cmd.mt14
FROM g_piece cmd
INNER JOIN g_piece lot
ON lot.GPIREFNOTAIRE = cmd.refpiece
WHERE lot.gpirole = 'B2029005'
) comm