无法使用 MySQL 'UNION ALL' 合并行

问题描述 投票:0回答:1

我正在尝试为我的 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 获得单独的行。我做错了什么?

sql mysql phpmyadmin
1个回答
0
投票

当然它不会合并它们。这就是 UNION 的含义:在第一个查询结束后添加来自附加查询的数据。如果需要合并它们,则需要将 UNION 查询包装在外部 SELECT 查询中,并在那里进行分组。所以代替:

SELECT ..
FROM ..
GROUP BY ..
UNION <ALL>
SELECT ..
FROM ...
GROUP BY ..

你这样做:

SELECT ..
FROM (
   SELECT ..
   FROM ..
   UNION <ALL>
   SELECT ..
   FROM ...
) t
GROUP BY ..
© www.soinside.com 2019 - 2024. All rights reserved.