具体的sql查询麻烦

时间:2011-12-31 04:13:19

标签: mysql

我在编写此查询时遇到问题。我有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

1 个答案:

答案 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子句会相应地变得更复杂。