Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.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中的联合求和_Mysql_Sql - Fatal编程技术网

MySql中的联合求和

MySql中的联合求和,mysql,sql,Mysql,Sql,我有下面这个简单的表格 FROM_CATEGORY TO_CATEGORY LENGTH A D 5 B C 6 B B 2 C D 4 D D

我有下面这个简单的表格

FROM_CATEGORY      TO_CATEGORY      LENGTH
     A                 D              5
     B                 C              6
     B                 B              2
     C                 D              4
     D                 D              1
我只想得到下面的结果

CATEGORY      COUNT_REPEATED      SUM_LENGTH
   A                1                5
   B                2                8
   C                2                10
   D                2                10
我曾尝试使用下面的查询,但对于B对B和D对D,我将计数和求和两次

SELECT t1.CATEGORY , COUNT(*) , SUM(t1.LENGTH)  FROM
(SELECT   FROM_CATEGORY AS CATEGORY , SUM(LENGTH) AS LENGTH FROM categoryTable GROUP BY FROM_CATEGORY
UNION ALL 
SELECT   TO_CATEGORY AS CATEGORY, SUM(LENGTH) AS LENGTH   FROM categoryTable GROUP BY TO_CATEGORY) AS t1 GROUP BY t1.CATEGORY 

知道怎么做吗?

只需过滤两个类别相同的行:

SELECT t1.CATEGORY , COUNT(*) , SUM(t1.LENGTH)
FROM
 ( SELECT   FROM_CATEGORY AS CATEGORY , SUM(LENGTH) AS LENGTH 
   FROM categoryTable
   WHERE FROM_CATEGORY <> TO_CATEGORY 
   GROUP BY FROM_CATEGORY

   UNION ALL 

   SELECT   TO_CATEGORY AS CATEGORY, SUM(LENGTH) AS LENGTH
   FROM categoryTable
   GROUP BY TO_CATEGORY) AS t1
GROUP BY t1.CATEGORY 

修改dnoeth的回答如下

SELECT t1.CATEGORY , SUM(t1.counter), SUM(t1.LENGTH) FROM 
( SELECT   FROM_CATEGORY  AS CATEGORY , COUNT(*)  AS counter , SUM(LENGTH) AS LENGTH FROM categoryTable 
WHERE  FROM_CATEGORY  <> TO_CATEGORY 
GROUP BY FROM_CATEGORY
UNION ALL 
SELECT   TO_CATEGORY AS CATEGORY, COUNT(*)  AS counter , SUM(LENGTH) AS LENGTH  FROM categoryTable GROUP BY TO_CATEGORY) AS t1
GROUP BY t1.CATEGORY 

谢谢,但是计数应该存在于每个select语句中,就像sumlength一样。@AliAlawi:我不明白你的意思。外部选择中的计数*应包括从_CATEGORY=到_CATEGORY?
SELECT t1.CATEGORY , SUM(t1.counter), SUM(t1.LENGTH) FROM 
( SELECT   FROM_CATEGORY  AS CATEGORY , COUNT(*)  AS counter , SUM(LENGTH) AS LENGTH FROM categoryTable 
WHERE  FROM_CATEGORY  <> TO_CATEGORY 
GROUP BY FROM_CATEGORY
UNION ALL 
SELECT   TO_CATEGORY AS CATEGORY, COUNT(*)  AS counter , SUM(LENGTH) AS LENGTH  FROM categoryTable GROUP BY TO_CATEGORY) AS t1
GROUP BY t1.CATEGORY