Mysql将两个表中的相同值计数为两个不同的计数
我想计算一个存在于两个不同表中的值。但它应该像这样分开显示: 当然我可以分开数。但是我想在一个查询中,在一个结果中使用它。谢谢你的帮助Mysql将两个表中的相同值计数为两个不同的计数,mysql,Mysql,我想计算一个存在于两个不同表中的值。但它应该像这样分开显示: 当然我可以分开数。但是我想在一个查询中,在一个结果中使用它。谢谢你的帮助 SELECT `X1`, COUNT(`X1`) AS Sales FROM `table1` GROUP BY `X1` SELECT `X1`, COUNT(`X1`) AS Purchases FROM `table2` GROUP BY `X1` 这是一种痛苦,因为每个表中的x1值集可能不相同 这里有一种方法使用union all和group by
SELECT `X1`, COUNT(`X1`) AS Sales FROM `table1` GROUP BY `X1`
SELECT `X1`, COUNT(`X1`) AS Purchases FROM `table2` GROUP BY `X1`
这是一种痛苦,因为每个表中的
x1
值集可能不相同
这里有一种方法使用union all
和group by
:
select x1, sum(sales) as sales, sum(purchases) as purchases
from ((select x1, count(*) as sales, 0 as purchases
from table1
group by x1
) union all
(select x2, 0, count(*)
from table2
group by x1
)
) t12
group by x1;
使用子查询从一个表中获取计数,然后将其与另一个表联接
SELECT t1.x1, COUNT(*) AS sales, t2.purchases
FROM table1 AS t1
JOIN (SELECT x1, COUNT(*) AS purchases
FROM table2
GROUP BY x1) AS t2
ON t1.x1 = t2.x1
GROUP BY t1.x1
实际上,在两个子查询中进行分组可能更有效
SELECT t1.x1, t1.sales, t2.purchases
FROM (SELECT x1, COUNT(*) AS sales
FROM table1
GROUP BY x1) AS t1
JOIN (SELECT x1, COUNT(*) AS purchases
FROM table2
GROUP BY x1) AS t2
ON t1.x1 = t2.x1
但是,如果有任何x1
值不在这两个表中,则这两个查询都将忽略它们。理想的解决方案是完全外部连接
,但MySQL没有此操作。有关解决方法,请参阅。戈登·林诺夫的答案没有这个问题。或者,如果有另一个表列出了所有x1
值,则可以将其用作主表,并将上述两个子查询与之一起左连接