Mysql 前5行按每种类型按引用求和,所有其他行等于1,按团队ID分组
我有一个SQL语句,其中每个类型的前5行是根据WSF_REF选择的,权重相加在一起,其中状态为“Approved”。每个类型的每个引用的所有其他行被分类为1。这个很好用。我希望添加第二组TEAMIDMysql 前5行按每种类型按引用求和,所有其他行等于1,按团队ID分组,mysql,Mysql,我有一个SQL语句,其中每个类型的前5行是根据WSF_REF选择的,权重相加在一起,其中状态为“Approved”。每个类型的每个引用的所有其他行被分类为1。这个很好用。我希望添加第二组TEAMID "SELECT WSF_REF, SUM(WEIGHT) FROM (SELECT t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT FROM test t1 LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.
"SELECT WSF_REF, SUM(WEIGHT)
FROM (SELECT t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT
HAVING COUNT(t2.ID) < 5
UNION ALL
SELECT t1.ID, t1.WSF_REF, t1.TYPE, 1
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE
HAVING COUNT(t2.ID) >= 5) t
GROUP BY WSF_REF";
预期结果
TEAM ID WEIGHT
---------------------
Red 112
Blue 10
因此,WSF_REF仍然用于计算初始总数,但GROUP BY需要是TEAMID。请尝试下面的方法-
SELECT TEAMID,SUM(WEIGHT)
FROM (SELECT t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT,t1.TEAMID
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT,t1.TEAMID
HAVING COUNT(t2.ID) < 5
UNION ALL
SELECT t1.ID, t1.WSF_REF, t1.TYPE, 1,t1.TEAMID
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE,t1.TEAMID
HAVING COUNT(t2.ID) >= 5) t
GROUP BY TEAMID
SELECT TEAMID,SUM(WEIGHT)
FROM (SELECT t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT,t1.TEAMID
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE, t1.WEIGHT,t1.TEAMID
HAVING COUNT(t2.ID) < 5
UNION ALL
SELECT t1.ID, t1.WSF_REF, t1.TYPE, 1,t1.TEAMID
FROM test t1
LEFT JOIN test t2 ON t2.WSF_REF = t1.WSF_REF AND t2.TYPE = t1.TYPE AND t2.STATUS = t1.STATUS AND t2.ID < t1.ID
WHERE t1.STATUS = 'Approved'
GROUP BY t1.ID, t1.WSF_REF, t1.TYPE,t1.TEAMID
HAVING COUNT(t2.ID) >= 5) t
GROUP BY TEAMID
TEAMID weight
Red 112
Blue 10