我正在尝试为我的 SQL 考试准备查询。该数据库应该是一个点播广播数据库。这是我的查询,它应该将内容/剪辑会话与直播会话结合起来,并按广播名称合并它们
SELECT
COUNT(sessione.session_id) AS "Sessioni",
COUNT(DISTINCT sessione.user_id) AS "Numero Utenti",
AVG(sessione.rating) AS "Rating Medio",
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(sessione.end_time, sessione.start_time)))) AS Tempo_Totale_Di_Ascolto,
radio.radio_name
FROM sessione
JOIN puntata ON puntata.palinsesto_id = sessione.palinsesto_id
JOIN radio ON radio.radio_id = puntata.radio_id
GROUP BY radio.radio_name
UNION ALL
SELECT
COUNT(sessione.session_id) AS "Sessioni",
COUNT(DISTINCT sessione.user_id) AS "Numero Utenti",
AVG(sessione.rating) AS "Rating Medio",
SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(sessione.end_time, sessione.start_time)))) AS Tempo_Totale_Di_Ascolto,
radio.radio_name
FROM sessione
JOIN radio ON sessione.livestream_id = radio.livestream_id
WHERE sessione.livestream_id IS NOT NULL
GROUP BY radio.radio_name
ORDER BY `radio_name` ASC;
这是我得到的输出:
所需的输出应该将具有相同电台名称的行合并为一个(这就是我认为使用 UNION ALL 运算符所做的事情),而不是为 BBC6 和 Radio Capital 获得单独的行。我做错了什么?
当然它不会合并它们。这就是 UNION 的含义:在第一个查询结束后添加来自附加查询的数据。如果需要合并它们,则需要将 UNION 查询包装在外部 SELECT 查询中,并在那里进行分组。所以代替:
SELECT ..
FROM ..
GROUP BY ..
UNION <ALL>
SELECT ..
FROM ...
GROUP BY ..
你这样做:
SELECT ..
FROM (
SELECT ..
FROM ..
UNION <ALL>
SELECT ..
FROM ...
) t
GROUP BY ..