mysql group by返回所有行
我有两张桌子(表1和表2)。表1包含选项,表2包含每个选项的结果mysql group by返回所有行,mysql,Mysql,我有两张桌子(表1和表2)。表1包含选项,表2包含每个选项的结果 **table1** table2 id id optionvalue optionvalueid time (unixtime) 因此,当插入数据时,它将存储在表2中。表1中有5个optionvalue,当插入数据时,它将在表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,所以它工作得很好。非常感谢。