这是我的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.issuestatus(10127 - > 10131),所以每次运行查询十次更改这两个字段。
是否可以将此压缩为一个将返回所有十个SUM的查询?
编辑:我希望结果也包含空值。目前,只返回8行,因为ji.issuestatus = 10128没有11381和11382的NUMBERVALUE。我希望结果为还包括10128,其值为11381/2的空值。
答案 0 :(得分:1)
这样的事情:
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子句在那里,以便您为十种不同组合中的每一种都有一个总和,否则您将只得到与十种组合中的任何一种相匹配的所有行的总和。 / p>
答案 1 :(得分:1)
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
答案 2 :(得分:0)
是的,你可以使用我的sql IN功能。
试试这个
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;
答案 3 :(得分:0)
GROUP BY
返回所有2 * 5总和,不包含缺失条目的总和。要返回缺失条目的总和,请使用LEFT JOIN。 tableexpr1 JOIN tableexpr2 ON ...
和tableexpr1 LEFT JOIN tableexpr2 ON ...
之间的区别是,即使tableexpr2中没有相应的条目,也会输出tableexpr1中的LEFT JOIN条目。
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;