mysql group by返回所有行

mysql group by返回所有行,mysql,Mysql,我有两张桌子(表1和表2)。表1包含选项,表2包含每个选项的结果 **table1** table2 id id optionvalue optionvalueid time (unixtime) 因此,当插入数据时,它将存储在表2中。表1中有5个optionvalue,当插入数据时,它将在表2中插入

我有两张桌子(表1和表2)。表1包含选项,表2包含每个选项的结果

 **table1**                    table2
 id                            id
 optionvalue                   optionvalueid
                               time (unixtime)
因此,当插入数据时,它将存储在表2中。表1中有5个optionvalue,当插入数据时,它将在表2中插入表1的optionvalueid和unixtimestamp中的时间戳。每个月,我要计算每个optionvalue的值的数量。即使optionvalue没有值,我仍然希望看到count为零

我执行了以下查询,但只返回包含数据行的值

 SELECT 
po.id,po.optionvalue, COUNT(pr.optionvalueid) as votes,  
FROM_UNIXTIME(`time`, '%m-%Y') as ndate
FROM table 1 
LEFT JOIN table 2 pr ON po.id=pr.optionvalueid 
GROUP BY ndate, po.optionvalue ORDER BY ndate ASC

是否有其他方法进行查询,以便即使没有值,也会返回所有选项。

您可以
交叉
表1
连接到
表2
的不同月份,然后
连接到
表2
以聚合:

SELECT t.ndate, t1.id, t1.optionvalue, COUNT(t2.optionvalueid) votes  
FROM table1 t1 
CROSS JOIN (SELECT DISTINCT FROM_UNIXTIME(`time`, '%m-%Y') ndate FROM table2) t 
LEFT JOIN table2 t2 ON t1.id = t2.optionvalueid AND t.ndate = FROM_UNIXTIME(t2.`time`, '%m-%Y') 
GROUP BY t.ndate, t1.id, t1.optionvalue 
ORDER BY t.ndate ASC

不幸的是,同样的结果。@BharatPaudyal将表1交叉连接到不同的月份,返回表1的所有选项值与表2的所有月份的所有组合。因此,如果你做得正确,你会得到所有结果。如果您没有得到某些optionvalues的结果,这意味着您没有按原样使用我的查询。对不起,我的错误是,有一个where子句,它是misisng,所以它工作得很好。非常感谢。