我在MySQL DB中有两个表; table1,table2。
它们都有一个列(浮点)值。它实际上是我们的研究项目的转储,它产生单一的价值结果。
其中许多值都会被重复,并且在Python中对它们进行排序和过滤会很麻烦,所以我可能会将它们转储到DB中的表中会更快。
因此,SQL查询的最终结果是按以下值分组:
value table1_count table2_count
1.0 0 1
1.1 1 3
2.1 4 5
我想出的查询如下:
select everything.value, everything.count1, everything.count2
from
((
select X as value, count(*) from table1
) union all (
select X as value, count (*) from table2
)) everything
group by everything.value
into outfile "/count";
有什么建议吗?
谢谢,
答案 0 :(得分:1)
您无法在内部查询中按组进行计数,因为您在外部查询中定义了组。这应该更简单:
select everything.value, count(*)
from
(
select X as value from table1
union all
select X from table2
) everything
group by value
into outfile "/count";
此处还有一些琐事:当您使用UNION
时,您只需要在第一个联合查询中定义列别名。
重新评论。这是一个解决方案:
select everything.value, sum(t = 'success') as s, sum(t = 'failure') as f
from
(
select X as value, 'success' as t from table1
union all
select X, 'failure' from table2
) everything
group by value
into outfile "/count";
这在MySQL中使用了一个技巧,布尔表达式返回0表示false或1表示true表示。因此,当您总结一堆表达式时,您将获得表达式为true的行的计数。 (不要在其他品牌的SQL数据库中依赖这个技巧。)