MYSQL MAX / COUNT / IN / DATE

时间:2009-05-14 17:12:22

标签: php sql mysql

希望你能提出建议。我把头发拉出来查询,希望你能提出建议。

我有一个表格,我希望从日期之间的内部计数中选择MAX。使用IN。

View Table

这是我尝试过的,但根本没有运气。

SELECT MAX(no_hits) from (SELECT count(hits) AS 'no_hits' ) FROM stats WHERE 'date' >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH AND zones_code IN('011242077793513596890', '011242077783866125432'))

所以基本上我只想要为表现最佳的区域返回一个no_hits。

希望你能告诉我哪里出错了。

谢谢你,如果你提出

3 个答案:

答案 0 :(得分:2)

SELECT `zones_code`, SUM(`hits`) AS `no_hits`
FROM `stats`
WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY `zones_code`
ORDER BY `no_hits` DESC
LIMIT 1

答案 1 :(得分:2)

您的查询是:

SELECT MAX(no_hits) 
FROM (SELECT count(hits) AS 'no_hits' ) FROM stats 
  WHERE 'date' >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH 
    AND zones_code IN('011242077793513596890', '011242077783866125432')
);

您的查询存在以下问题:

  • 您在'no_hits'之后关闭了子查询括号。
  • 您没有为子查询提供表别名。每个派生表都必须有一个表别名。
  • 您没有关闭DATE_SUB()功能的括号。
  • 您使用了COUNT(),我认为您应该使用SUM(),如果您想要每个区域的总点击次数。
  • 您没有将每个区域的点击次数关联起来;你的小计是整个表格。
  • 您使用字符串分隔符('')代替'date'而不是标识符分隔符(即后引号)。您要将文字字符串'date'与日期值进行比较,以表示将列date与日期值进行比较。

@ chaos的答案中的查询很接近,但我认为你应该使用SUM()

SELECT `zones_code`, SUM(`hits`) AS `no_hits`
FROM `stats`
WHERE `date` >= DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
GROUP BY `zones_code`
ORDER BY `no_hits` DESC
LIMIT 1;

结果是zone_code 011242077793513596890,共有255次点击。


PS:当您在线提问时,请以文本格式提供 足够的代码和数据供人们轻松测试。您提供了一些示例数据的屏幕截图,但未显示表创建代码。这不像您提供有效的CREATE TABLE语句和示例INSERT语句来填充它一样有用。

CREATE TABLE IF NOT EXISTS `stats` (
  `id` int(11) NOT NULL,
  `zones_code` char(21) default NULL,
  `date` date default NULL,
  `hits` int(11) default NULL,
  PRIMARY KEY  (`id`)
);

INSERT INTO stats VALUES
(10, '011242077793513596890', '2009-05-11', 13),
(12, '011242077793513596890', '2009-05-12',235),
(24, '011242077793513596890', '2009-05-13',  2),
(32, '011242077793513596890', '2009-05-14',  5),
(17, '011242077783866125432', '2009-05-12',165),
(22, '011242077783866125432', '2009-05-13',  2),
(30, '011242077783866125432', '2009-05-14',  5),
(19, '011242077743853330663', '2009-05-12', 61),
(20, '011242077737314753388', '2009-05-12', 54),
(28, '011242077737314753388', '2009-05-13',  7),
(36, '011242077737314753388', '2009-05-14', 31),
(14, '011242077730456603312', '2009-05-12',240),
(26, '011242077730456603312', '2009-05-13',  2),
(34, '011242077730456603312', '2009-05-14',  5);

以上是我根据您的屏幕截图输入的内容!

帮自己一个忙,让人们更容易帮助你。

答案 2 :(得分:0)

我会使用带有ORDER BY DESC的{​​{1}}排序子句来获取最大值。