#mysql #sql #database #union #database-administration
#mysql #sql #База данных #объединение #администрирование базы данных
Вопрос:
Я использую приведенный ниже запрос для получения отчета по 10 различным идентификаторам с использованием union-all.Есть ли какой-либо способ уменьшить запрос?
SELECT
sc.consentid,
CASE
WHEN ue.userid IS NULL THEN 'No'
ELSE 'Yes'
END ,
sc.firstname,
sc.lastname,
CASE
WHEN SUM(time_on_page) > 0 THEN ROUND(SUM(time_on_page) / 60, 2)
ELSE 'No videos watched'
END AS timeonpage,
'ID1' ,
CASE
WHEN COUNT(DISTINCT COALESCE(article, video)) > 0 THEN COUNT(DISTINCT COALESCE(article, video))
ELSE 'no video in list watched'
END AS countvideoswatched
FROM
studentconsent AS sc
LEFT JOIN
useremails AS ue USING (email)
LEFT JOIN
masterstats_innodb AS m ON ue.userid = m.user_id
WHERE
(sc.email LIKE '%.it'
AND (sc.consentid IS NOT NULL
AND m.id IS NULL)
OR (m.id IS NOT NULL
AND m.timestamp >= '2020-12-01'
AND (video IN (SELECT
objectid
FROM
playlists
JOIN
playlisttoobjects USING (playlistid)
WHERE
unique_id = 'ID1'
AND objecttype = 'article'))))
GROUP BY sc.consentid
union all (query2 with differentid)....so on
Здесь мне нужно использовать команду union-all, чтобы объединить все 10 запросов select с разными идентификаторами.Есть какой-нибудь способ уменьшить это?
Комментарии:
1. Я предполагаю, что
unique_id
это тот столбец, который вы хотите отфильтровать? Если это так, просто используйтеunique_id in ('A','B',...)
.2. но есть условие case с другим уникальным идентификатором @Andrew
3. Ниже я использую регистр для отображения unique_id, если я использую in, то он будет отображать один и тот же unique_id для всех строк
CASE WHEN SUM(time_on_page) > 0 THEN ROUND(SUM(time_on_page) / 60, 2) ELSE 'No videos watched' END AS timeonpage, 'ID1' ,
4. Это слишком сложный запрос, чтобы обращаться за помощью. Вы даже не указываете unique_id в своем запросе, поэтому я понятия не имею, из какой таблицы он поступает.
IN
Предложение является основным ответом на ваш вопрос.5. уникальный идентификатор поступает из таблицы плейлистов @Andrew