MySQL рассчитывать по нескольким столбцам, с подзапросом, с одним запросом результата - PullRequest
0 голосов
/ 07 января 2020

У меня есть таблица (kt2020) с полями (task1, task2, .. pts, user, date). Одна и та же задача может отображаться в нескольких столбцах. Для подсчета по задачам у меня есть подзапрос:

SELECT
    task,
    count(*)
FROM     (SELECT task1 AS task FROM kt2020 UNION ALL
          SELECT task2 AS task FROM kt2020 UNION ALL
          SELECT task3 AS task FROM kt2020 UNION ALL
          SELECT task4 AS task FROM kt2020 UNION ALL
          SELECT task5 AS task FROM kt2020 UNION ALL
          SELECT task6 AS task FROM kt2020 UNION ALL
          SELECT task7 AS task FROM kt2020
) t

group by task

Теперь мне нужно создать внешний запрос, который будет дополнительно фильтровать по пользователю и дате; smtg вот так:

WHERE STR_TO_DATE(date, '%Y-%m-%d') >= CURDATE() - INTERVAL 7 DAY and user = 'username'

Это даст мне результат задач за последние 7 дней от пользователя 'username'. Прямо сейчас эти внешние поля скрыты для текущего запроса, и я не знаю, как получить доступ к «дате» или «пользователю» в том же запросе.

Полагаю, я мог бы сделать что-то длинное и громоздкое , но я уверен, что есть способ, который использует общую функцию, о которой я не знаю?

1 Ответ

1 голос
/ 07 января 2020

Один из вариантов - это подзапрос для возврата date и user, а затем использование условия WHERE для фильтрации:

SELECT
    task,
    count(*)
FROM     (SELECT task1 AS task, date, user FROM kt2020 UNION ALL
          SELECT task2 AS task, date, user FROM kt2020 UNION ALL
          SELECT task3 AS task, date, user FROM kt2020 UNION ALL
          SELECT task4 AS task, date, user FROM kt2020 UNION ALL
          SELECT task5 AS task, date, user FROM kt2020 UNION ALL
          SELECT task6 AS task, date, user FROM kt2020 UNION ALL
          SELECT task7 AS task, date, user FROM kt2020
) t
WHERE STR_TO_DATE(date, '%Y-%m-%d') >= CURDATE() - INTERVAL 7 DAY and user = 'username'
group by task
...