2014-02-19 4 views
2

다음 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'); 

여기에 나는 기간의 범위에서 같은 방송국 정보를 얻을 필요가있다.

예를 들어, 범위를 선택하는 경우 1 월에서 3 월까지 매월 결과 행이있는 방송국이 표시되어야합니다. 여기

에만 스테이션 A와 C 월에서 3월

선택한 범위, 즉, 모든 달에 대한 리뷰 수를 가지고있다

그러므로 나는 GROUP BY를 시도

A - Jan - 10 
C - Jan - 14 

A - Feb - 12 
C - Feb - 20 

A - Mar - 14 
C - Mar - 28 

같은 결과를 얻을 필요 역, result_month 또한 테이블의 조인을 시도했지만 도움이되지 않습니다.

수천 개의 스테이션이있는 거대한 테이블로 작업하고 있으며 쿼리를 최적화해야합니다. 출력과 같아야 나도 도시 현명한 집계 정보를 얻을 필요가

제 2 부, ,

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 될 것입니다.

SELECT station 
FROM sample_table 
GROUP BY station 
HAVING COUNT(DISTINCT result_month) = 
      (SELECT COUNT(DISTINCT result_month) FROM sample_table); 

이 당신을 얻을 것이다 A와 C (Example on SQL Fiddle) :

+0

위의 예에서 WHERE station IN ('A', 'C') 단 1 절만 그룹화 할 수 있습니다. 그룹화는 동일한 데이터를 가진 여러 행이있는 경우에 사용됩니다 (예 : 다른 검토 카운트가 약간 다를 수 있음) – Svetoslav

+0

이 경우 스테이션 수는 lakhs입니다. IN 절에 항목을 넣는 것이 좋은 방법입니까? – suneesh

+0

Are Are 그 진짜 DDLs!!?!? 그리고 Suneesh lakh이 무엇인지 알고있는 Suneesh (나는 그것이 꽤 많은 사람들이다)! – Strawberry

답변

관련 문제