我在编写此查询时遇到问题。我有2个表,vote_table和click_table。在vote_table中我有两个字段,id和date。日期格式为“12/30/11:14:28:36”。在click_table中我有两个字段,id和date。日期的格式为“12.30.11”。
id在两个表中多次出现。我想要做的是产生一个包含3个字段的结果:id,votes,clicks。 id列应该具有不同的id值,titles列应该具有ID具有date_table日期12/30/11%的总时间,并且点击应该具有ID具有日期12.30.11的总时间。点击表格,如下所示:
ID | VOTES | CLICKS
001 | 24 | 50
002 | 30 | 45
答案 0 :(得分:0)
假设'date'列的类型实际上是DATE或DATETIME(而不是,例如,VARCHAR),那么所需的操作是相当简单的:
SELECT v.id, v.votes, c.clicks
FROM (SELECT id, COUNT(*) AS votes
FROM vote_table AS v1
WHERE DATE(v1.`date`) = TIMESTAMP('2011-12-30')
GROUP BY v1.id) AS v
JOIN (SELECT id, COUNT(*) AS clicks
FROM click_table AS c1
WHERE DATE(c1.`date`) = TIMESTAMP('2011-12-30')
GROUP BY c1.id) AS c
ON v.id = c.id
ORDER BY v.id;
请注意,这仅显示在给定日期至少有一次投票和至少一次点击的ID值。如果您需要查看投票或点击的所有ID值,或者两者都需要,那么您必须做更多的工作。
如果由于它们是VARCHAR列而必须规范化日期,则WHERE子句会相应地变得更复杂。