Выберите количество общих записей, а также отдельных записей - PullRequest
0 голосов
/ 24 января 2019

У меня есть такая таблица:

PalmId | UserId | CreatedDate
1      | 1      | 2018-03-08 14:18:27.077
1      | 2      | 2018-03-08 14:18:27.077
1      | 3      | 2018-03-08 14:18:27.077
1      | 1      | 2018-03-08 14:18:27.077

Я хочу знать, сколько дат было создано для Palm 1, и я также хотел бы знать, сколько пользователей создали эти даты для Palm 1. Таким образом, результат для первого - 4, а для второго - 3

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

SELECT MT.[PalmId], COUNT(*) AS TotalDates, T1.[TotalUsers]
FROM [MyTable] MT
    LEFT OUTER JOIN (
        SELECT MT2.[PalmId], COUNT(*) AS TotalUsers
        FROM [MyTable] MT2
        GROUP BY MT2.[UserId]
    ) T1 ON T1.[PalmId] = MT.[PalmId]
GROUP BY MT.[PalmId], T1.[TotalUsers]

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Если вы хотите «4» и «3», то я думаю, что вы хотите:

SELECT MT.PalmId, COUNT(*) AS NumRows, COUNT(DISTINCT mt.UserId) as NumUsers
FROM MyTable MT
GROUP BY MT.PalmId
0 голосов
/ 24 января 2019

Согласно первой таблице вы можете сделать что-то вроде этого:

select count(distinct uerid) as N_Users, 
       count(created_date) as created_date, -- if you use count(*) you consider also rows with 'NULL'
       palmid
from your_table
group by palmid 
...