Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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 前5行按每种类型按引用求和,所有其他行等于1,按团队ID分组_Mysql - Fatal编程技术网

Mysql 前5行按每种类型按引用求和,所有其他行等于1,按团队ID分组

Mysql 前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.

我有一个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.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