2016-10-13 3 views
0
내가 아이튠즈에서 제공하는 다음의 표는, 구글 플레이 한

, 마이크로 소프트 : 예 항목이 같은 수 있습니다집계 비교 쿼리

`offers` 
- id 
- Title 
- Year 
- Platform 
- Offer 

:

(1, 'Titanic', 1997, 'iTunes', 'HDBUY') 

을이 영화 것을 의미 타이틀 Titanic (1997)은 iTunes의 HDBUY에서 사용할 수 있습니다.

나는 여러 플랫폼을 가지고 있으며 iTunes를 다른 플랫폼과 비교하여 어떤 플랫폼이 더 많은 타이틀을 제공하는지 확인하고 싶습니다. 이상적으로, 내 쿼리의 결과는 같을 것이다 다음 : I을 수행하여 플랫폼 당 모든 제안을 얻을 수

CREATE TABLE `offers` (
    `id` varchar(20) DEFAULT NULL, 
    `Title` varchar(100) DEFAULT NULL, 
    `Year` varchar(20) DEFAULT NULL, 
    `Platform` varchar(100) DEFAULT NULL, 
    `Offer` varchar(20) DEFAULT NULL 
); 

INSERT INTO `offers` (`id`, `Title`, `Year`, `Platform`, `Offer`) 
VALUES 
    ('1', 'Titanic', '1997', 'iTunes', 'HDBUY'), 
    ('1', 'Titanic', '1997', 'iTunes', 'SDBUY'), 
    ('2', 'Titanic', '1997', 'Microsoft', 'SDBUY'), 
    ('2', 'Titanic', '1997', 'Microsoft', 'HDBUY'), 
    ('2', 'Titanic', '1997', 'Microsoft', 'SDRENT'), 
    ('3', 'Titanic', '1997', 'Google', 'HDBUY'), 
    ('4', 'Avatar', '2009', 'Google', 'HDBUY'); 

: 여기

Title  Year  iTunes_Offers  Top_Platform_Offers   Top_Platform 
Titanic  1997  HDBUY,SDBUY   HDBUY,SDBUY,SDRENT   Microsoft 
Avatar  2009        HDBUY      Google 

과 함께 테스트 할 샘플 데이터와 스키마입니다 다음 쿼리 :

SELECT Title, Year, Platform, GROUP_CONCAT(Offer) GROUP BY id 

나에게 제공합니다

0123을

그러나 3 가지 열, iTunes_Offers, Top_Platform_OffersTop_Platform을 함께 얻을 수 있도록 집계하는 방법을 잘 모르겠습니다. 예를 들어, "Psycho (2005)"는 "Psycho (1960)"와 다른 영화입니다. 예를 들어, CONCAT (제목, 연도)별로 집계하려는 플랫폼을 그룹으로 묶으십시오.

어떻게하면됩니까?

답변

3

조건부 집계 사용할 수 있습니다 당신은 중복을 가질 수 있다면

SELECT Title, Year, Platform, 
     GROUP_CONCAT(CASE WHEN platform = 'iTunes' THEN Offer END) AS iTunes, 
     GROUP_CONCAT(CASE WHEN platform = 'Microsoft' THEN Offer END) AS Microsoft, 
     GROUP_CONCAT(CASE WHEN platform = 'Google' THEN Offer END) AS Google 
FROM offers 
GROUP BY CONCAT(title,year); 

을 다음 GROUP_CONCAT(DISTINCT . . .)를 사용합니다.

+0

감사합니다. 이것은 내가 필요한 것 같습니다. GROUP_CONCAT 조건부의 – David542

+0

에서 가장 많이 제공되는 플랫폼을 어떻게 확인할 수 있습니까? 이를 위해 하위 쿼리를 수행해야합니까? – David542

+0

@ David542 . . 귀하의 질문에 어떤 플랫폼이 가장 많이 제공되는지를 결정하는 것에 관한 어떤 것도없는 것 같습니다. 새로운 질문은 코멘트가 아닌 새로운 질문으로해야합니다. 원하는 결과를 질문에 포함 시키십시오. –