2015-07-01 51 views
0

我有一個air_date字段的記錄表(讓我們稱之爲電視節目)。SQL - group_by的相關記錄的平均數

我有另一個show_id字段相關的廣告表。

我想獲得每個日期的廣告平均數量爲每個日期(與where子句指定的節目)。

目前,我有這樣的:

SELECT 
`air_date`, 
(SELECT COUNT(*) FROM `commercial` WHERE `show_id` = `show`.`id`) AS `num_commercials`, 
FROM `show` 
WHERE ... 

這讓我像這樣的結果:

air_date | num_commercials 
2015-6-30 | 6 
2015-6-30 | 3 
2015-6-30 | 8 
2015-6-30 | 2 
2015-6-31 | 9 
2015-6-31 | 4 

當我做了GROUP_BY,它只是給了我的紀錄之一,但我想要的每個air_date的平均值。

+0

'2015-6-31'? 6月31日? –

回答

0

不太清楚我對你想要什麼明確的 - 但是這並做

SELECT `air_date`, 
AVG((SELECT COUNT(*) FROM `commercial` WHERE `show_id` = `show`.`id`)) AS `num_commercials`, 
FROM `show` 
WHERE ..... 
GROUP BY `air_date` 

(注意雙括號是必需的AVG功能)

+0

非常感謝。我錯過了雙括號。簡直不敢相信我在這上面花了2個小時...... – user3730726

+0

我也抓了一陣子。 – PaulF

0

您可以使用子查詢來選擇通過air_date/show計算廣告數量,然後使用外部查詢來選擇air_date的平均廣告片數。

像這樣的東西應該工作:

select air_date, avg(num_commercials) 
from 
(
    select show.air_date as air_date, 
    show.id as show_id, 
    count(*) as num_commercials 
    from show 
    inner join commercial on commercial.show_id = show.id 
    group by show.air_date, show.id 
    where ... 
) sub 
group by air_date