MySQL разделил предложение groupBy на несколько столбцов - PullRequest
0 голосов
/ 13 сентября 2018

Мое знание сложных запросов MySQL не очень хорошее, и у меня возникают проблемы с поиском или даже формулировкой этого вопроса.

У меня есть таблица, которая выглядит следующим образом.enter image description here

У меня есть запрос, который подсчитывает все строки, где 'type = student', а затем группирует их по годам и месяцам, для которых я использую созданный_колонку.Это довольно просто.

Запрос выглядит следующим образом:

SELECT YEAR(created_at) as year, MONTH(created_at) as month, COUNT(type) as student_count
FROM users
WHERE type = "student"
GROUP BY year, month
ORDER BY year, month

Теперь мне нужно добавить еще 2 столбца: «подписка» и «pay_per_video», которые будут дополнительно делить общее количество для каждогомесяц и год для уровня студента введите либо «подписка», либо «pay_per_video».Например.если в январе 2017 года зарегистрировано всего 20 студентов.12 могут быть студентами per_per_video, а 8 в этом месяце были студентами по подписке.Любые указатели очень ценятся.

ОБНОВЛЕНИЕ То, что я ищу, выглядит примерно так: Таблица: Subject_Selection

Year    Month       Student Count     Pay Per View     Subscription
--------------------------------------------------------------------
2016     12              20                 20               0
2017     1               23                 12              11
2017     2               30                 10              20
2017     3                2                  1               1
2017     4               12                  2              10
2017     5               90                 40              50
2017     6               12                  0              12

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

Пожалуйста, найдите ниже запрос для вашей потребности. Я надеюсь, что это будет выполняться, как вы хотите.

SELECT YEAR(created_at) as year, MONTH(created_at) as month, student_level, 
COUNT(type) as student_count
FROM users
WHERE type = "student"
GROUP BY year, month, student_level
ORDER BY year, month, student_level
0 голосов
/ 13 сентября 2018

Теперь мне нужно добавить еще 2 столбца: «subscription» и «pay_per_video», которые будут дополнительно делить общее количество для каждого месяца и года на тип студенческого уровня или «subscription» ИЛИ «pay_per_video».

Здесь я предлагаю вам просто добавить один столбец с именем что-то вроде level_type, в котором будет храниться либо подписка, либо «pay_per_video» в качестве значения.

, выполнив это, ваш SQL будет оптимизирован для,

SELECT year, month, COUNT(student_count), level_type FROM (SELECT YEAR(created_at) as year, MONTH(created_at) as month, COUNT(type) as student_count
FROM users
WHERE type = "student"
GROUP BY year, month
ORDER BY year, month) as s
GROUP BY level_type
0 голосов
/ 13 сентября 2018

Используйте условное агрегирование, как показано ниже:

SELECT YEAR(created_at) as year, MONTH(created_at) as month, COUNT(type) as student_count,
count(case when student_level='subscription' then 1 end) as subscriptioncount,
count(case when student_level='pay_per_vedio' then 1 end) as pay_per_vediocount
FROM users
WHERE type = "student"
GROUP BY year, month
ORDER BY year, month
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...