Нужна помощь в написании запроса

#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