Mysql 我可以将十个类似的SQL查询合并为一个查询吗?
这是我的MySQL查询:Mysql 我可以将十个类似的SQL查询合并为一个查询吗?,mysql,sql,Mysql,Sql,这是我的MySQL查询: SELECT ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum FROM jissue ji JOIN customfieldvalue cfv ON ji.ID=cfv.ISSUE WHERE ji.pkey LIKE '%PB-%' AND cfv.customfield=11381 AND ji.issuestatus=10127; 有两个可能的cfv.customfield 11381和11382,还有五个可能的ji.issues
SELECT ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum
FROM jissue ji JOIN customfieldvalue cfv ON ji.ID=cfv.ISSUE
WHERE ji.pkey LIKE '%PB-%'
AND cfv.customfield=11381 AND ji.issuestatus=10127;
有两个可能的cfv.customfield 11381和11382,还有五个可能的ji.issuestatus 10127->10131,因此我运行了十次查询,每次更改这两个字段
是否可以将其压缩成一个查询,返回所有十个总和
编辑:我希望结果也包括空值。目前,只返回8行,因为ji.issuestatus=10128没有11381和11382的NUMBERVALUE。我希望结果还包括10128,其中11381/2的值为空。是的,您可以在函数中使用我的sql 试试这个
SELECT ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum
FROM jissue ji JOIN customfieldvalue cfv ON ji.ID=cfv.ISSUE
WHERE ji.pkey LIKE '%PB-%'
AND cfv.customfield IN(11381,11381) AND ji.issuestatus IN (10127,10128,10129,10130,10131) GROUP BY cfv.customfield, ji.issuestatus;
大概是这样的:
SELECT cfv.customfield, ji.issuestatus, ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum
FROM jissue ji JOIN customfieldvalue cfv ON ji.ID=cfv.ISSUE
WHERE ji.pkey LIKE '%PB-%'
AND cfv.customfield IN (11381, 11382) AND ji.issuestatus IN (10127, 10128, ..., 10131)
GROUP BY cfv.customfield, ji.issuestatus
前两列和GROUP BY子句都在那里,这样您就可以为十个不同的组合中的每一个组合求和,否则您只需要求与十个组合中的任何一个匹配的所有行的和。sum是一个聚合函数。它会聚合使用“分组依据”定义的组中的值。所以我不太懂MySQL语法,但这是我的第一个猜测
SELECT ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum,
cfv.customfield,ji.issuestatus
FROM jissue ji JOIN customfieldvalue cfv ON ji.ID=cfv.ISSUE
WHERE ji.pkey LIKE '%PB-%'
AND cfv.customfield in (11381,11382) AND ji.issuestatus in (10127, ... , 10131)
group by cfv.customfield,ji.issuestatus
正如wumpz和Anthony Grist所说,您可以使用GROUP BY返回所有2*5的总和,而不返回缺失条目的总和。
若要返回缺失项的总和,请使用左联接。上的tableexpr1和tableexpr2之间的差异。。。和tableexpr1左连接tableexpr2打开。。。即使tableexpr2中没有相应的条目,也会输出tableexpr1中具有左连接条目的is
SELECT ji.issuestatus, cf.ID AS customfield_id, ROUND(SUM(cfv.NUMBERVALUE),0) AS mysum
FROM
jissue ji CROSS JOIN customfield cf
LEFT JOIN customfieldvalue cfv ON cfv.ISSUE=ji.ID AND cfv.customfield=cf.ID
WHERE
ji.pkey LIKE '%PB-%'
AND ji.issuestatus IN (10127,10128,10129,10130,10131)
AND cf.ID IN IN (11381, 11382)
GROUP BY ji.issuestatus, cf.ID;
OP需要十个和而不是一个,所以我猜你在这里缺少一个组。如果你想要它在一起,那么你可以在属性中使用。如果您正在寻找cfv.customfield和ji.issuestatus的特定组合,则可以使用与您的组合相对应的OR和IN组合。这很有效,但我希望它也返回空值。目前,ji.issuestatus=10128对于11381和11382没有NUMBERVALUE。我希望结果还包括10128,11381/2的值为空。完整外部连接返回一个MySQL错误。左JOIN只给出与JOIN相同的结果。下面是我现在使用的SQL:选择cfv.customfield、ji.issuestatus、ROUNDSUMcfv.NUMBERVALUE,0作为mysum从jissue ji左键连接ji.ID=cfv.ISSUE上的customfieldvalue cfv,其中ji.pkey类似于11381、11382中的“%PB-%”和cfv.customfield,以及10127、10128、10129、10130、10176中的ji.issuestatus按cfv.customfield分组,ji.issuestatus你能告诉我到底有哪对cfv.customfield,ji.issuestatus吗?customfield-issuestatus-mysum 11381 10127 10 11381 10129 8000 11381 10130 100 11381 10176 99 11382 10127 2999 11382 10129 1000 11382 10130 90000 11382 10176 20000mysql说:1064-你的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在第4行使用接近'VALUES 11381、11382 cfvcf LEFT JOIN customfieldvalue cfv ON cfv.ISSUE=j'的正确语法。因此,我想这在MySQL中是不可能的。