请参阅下面的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我试了一组一个站,result_month,也尝试了连接表,但它没有帮助。
我正在处理一个拥有数千个站点的大表,我需要对查询进行优化。
第二部分
我也需要得到城市智慧的汇总信息,输出应该是什么样的,
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任何帮助将是高度appreciated.Thanx提前。
发布于 2014-02-19 10:55:36
第一阶段是让每个月都有一个条目的电台:
SELECT station
FROM sample_table
GROUP BY station
HAVING COUNT(DISTINCT result_month) =
(SELECT COUNT(DISTINCT result_month) FROM sample_table);这将得到A和C (SQL Fiddle示例)。
然后,您可以将它加入到主表中:
SELECT t.station, t.reviewcount, t.result_month
FROM sample_table t
INNER JOIN
( SELECT station
FROM sample_table
GROUP BY station
HAVING COUNT(DISTINCT result_month) =
(SELECT COUNT(DISTINCT result_month) FROM sample_table)
) t2
ON t2.station = t.station;SQL Fiddle示例
编辑
你的第二个要求有点不清楚,我不知道你想在什么时候把这些城市分类,也就是说,如果你的数据如下:
(1, 'A','NewYork', 10, 'Jan'),
(2, 'B','NewYork', 10, 'Jan'),
(3, 'C','NewYork', 10, 'Jan'),
(4, 'A','NewYork', 10, 'Feb'),
(5, 'B','NewYork', 10, 'Feb'),
(6, 'A','NewYork', 10, 'Mar'),
(7, 'B','NewYork', 10, 'Mar');这笔款项是否应该包括C站,因为纽约每个月都有一个分录?所以一月份总共有30个。在这种情况下,您的查询将是:
SELECT t.City, SUM(t.reviewcount) AS reviewcount, t.result_month
FROM sample_table t
INNER JOIN
( SELECT City
FROM sample_table
GROUP BY City
HAVING COUNT(DISTINCT result_month) =
(SELECT COUNT(DISTINCT result_month) FROM sample_table)
) t2
ON t2.City = t.City
GROUP BY t.City, t.result_month;SQL Fiddle示例
还是应该只包括A和B,因为这些电台每个月都有一个条目?所以Jan总共只有20个。
SELECT t.City, SUM(t.reviewcount) AS reviewcount, t.result_month
FROM sample_table t
INNER JOIN
( SELECT station
FROM sample_table
GROUP BY station
HAVING COUNT(DISTINCT result_month) =
(SELECT COUNT(DISTINCT result_month) FROM sample_table)
) t2
ON t2.station = t.station
GROUP BY t.City, t.result_month;SQL Fiddle示例
发布于 2016-05-11 10:49:29
GROUP子句用于根据某些分组标准总结数据。在第一个示例中,我将根据AdventureWork2012数据库表Sales.SalesOrderDetail中的单个列对数据进行分组。这个例子和我剩下的大多数示例都使用AdventureWorks2012数据库。如果你想跟着走。http://academy.comingweek.com/sql-groupby-clause/
https://stackoverflow.com/questions/21877747
复制相似问题