2016-06-12 66 views
0

我有一個查詢,返回表中的組內的值的範圍。如何在這個「group by」mysql查詢中添加where exists語句?

現在我想檢查每個組,如果在「頁面」列中出現值「results」,並且只有在語句爲true的情況下才返回該行。

表結構的一個例子:

ID pages start_time 
    1 splash 12 
    1 view  14 
    1 comments 16 
    1 results 18 
    2 splash 1 
    2 view  13 
    2 comments 14 
    2 comments 15 
    3 test  2 
    3 splash 3 
    3 results 35 
    3 view  26 

從這個例子,以下應返回:

ID time_range 
    1 6 
    3 33 

因爲ID = 2不具有在列頁行 「結果」 。

我有以下查詢,但沒有得到額外的條件工作。

SELECT MAX(start_time)-MIN(start_time) 
FROM mytable 
WHERE country="United States" 
AND (here should come the if-results-in-pages-exists statements) 
GROUP BY my_id; 

如何正確添加此條件?

+1

能否請你對有關列和您運行查詢後所期望的輸出樣本提供你的表幾樣行?這將使它更加清晰。 –

+0

@EmanuelLainas我添加了一個例子,任何想法如何做到這一點? – user2212461

+1

也許有趣?作爲開始? http://sqlfiddle.com/#!9/142af/19 –

回答

1
SELECT MAX(start_time)-MIN(start_time) 
FROM mytable 
WHERE country="United States" 
AND pages like '%results%' 
GROUP BY my_id; 

或者

SELECT MAX(start_time)-MIN(start_time) 
FROM mytable 
WHERE country="United States" 
AND my_id IN (select distinct my_id from mytable where pages like '%results%') 
GROUP BY my_id; 
+1

你知道哪個結果所屬添加my_id – Strawberry

+1

到第一查詢聲音怎麼辦。第二不是這樣,它會表現得更差 - 我建議從你的答案中刪除它。 – Bohemian

+0

謝謝,但這些解決方案只會返回包含「結果」的行。不過,我希望整個包含ID的行也包含「結果」,請參閱上面的示例。任何想法如何做到這一點? – user2212461

1

這裏是我的版本:

SELECT 
    A.`id`, 
    MAX(B.`start_time`) - MIN(B.`start_time`) 
FROM `whenpages` A 
LEFT JOIN `whenpages` B ON 
    A.`id` = B.`id` 
WHERE 
    A.`pages` = 'results' 
GROUP BY 
    A.`id` 

必要時,更換A.pages =A.pages LIKE