Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 - Fatal编程技术网

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
值,则可以将其用作主表,并将上述两个子查询与之一起
左连接