【发布时间】:2014-02-19 10:29:25
【问题描述】:
请参阅下面的 MySQL 表。
-
-
-- Table structure for table `sample_table`
--
CREATE TABLE IF NOT EXISTS `sample_table` (
`id` bigint(11) NOT NULL AUTO_INCREMENT,
`station` varchar(300) NOT NULL,
`city` varchar(300) NOT NULL,
`reviewcount` int(6) NOT NULL,
`result_month` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
INSERT INTO `sample_table`(`id`, `station`, `reviewcount`, `result_month`) VALUES
(1, 'A','NewYork', 10, 'Jan'),
(2, 'B','NewYork', 12, 'Jan'),
(3, 'C','Florida', 14, 'Jan'),
(4, 'A','NewYork', 12, 'Feb'),
(5, 'B','NewYork', 14, 'Feb'),
(6, 'C','Florida', 20, 'Feb'),
(7, 'D','Washington', 12, 'Feb'),
(8, 'A','NewYork', 14, 'Mar'),
(9, 'B','NewYork', 14, 'Mar'),
(10, 'C','Florida', 28, 'Mar');
在这里,我需要在一段时间内获取相同的电台信息。
即,如果我们选择范围从一月到三月,则应显示具有每个月结果行的站点。
这里只有 A 站和 C 站在所选范围内(即从 1 月到 3 月)的每个月都有评论计数。
因此我需要得到类似的结果
A - Jan - 10
C - Jan - 14
A - Feb - 12
C - Feb - 20
A - Mar - 14
C - Mar - 28
我尝试了GROUP BY station,result_month,也尝试了表的JOIN,但是没有用。
我正在处理一个包含数千个站点的巨大表,我也需要优化查询。
第二部分
我还需要获取城市综合信息, 输出应该是什么样子的,
City -Station Count - Review Count
NewYork - 2 - 22 -Jan
Florida - 1 - 14 - Jan
NewYork - 2 - 26 -Jan
Florida - 1 - 10 - Jan
NewYork - 2 - 28 -Jan
Florida - 1 - 28 - Jan
任何帮助将不胜感激。提前感谢。
【问题讨论】:
-
在您提供的示例中,没有任何内容可以仅将 1 个子句 WHERE station IN ('A','C') 分组。当多行具有相同的数据时使用分组(可能略有不同,例如不同的评论计数)
-
在这种情况下,站数以十万为单位。在 IN 子句中放入数以万计的条目是一种好习惯吗?
-
那些是真正的 DDL 吗?!?!?而且,在南亚以外没有人知道 10 万是什么(尽管我承认这是相当多的人)!
-
@Strawberry 对不起我的错误。我应该说百万而不是十万
标签: php mysql sql query-optimization