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