Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подсчет кол-ва абонементов с разными курсами / 13 сообщений из 13, страница 1 из 1
29.12.2017, 10:14
    #39577730
guest_1234567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
Всем привет!
Нужна помощь.

Таблица абонементы Abonements
ID, ClientID, CourseID, CreateDateTime
Нужно подсчитать кол-во клиентов, у которых в заданном периоде приобретены
абонементы по двум и более курсам.

Сгруппировать сгруппировал, а как посчитать не могу вкурить.
Может через join надо делать?

Код: sql
1.
2.
3.
select COUNT(*), ClientID, CourseID from Abonements t1
where CreateDateTime between '20171201' and '20180101'
Group by ClientID, CourseID
...
Рейтинг: 0 / 0
29.12.2017, 10:18
    #39577734
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
guest_1234567,

Код: sql
1.
HAVING COUNT(*) > 1

?
...
Рейтинг: 0 / 0
29.12.2017, 10:20
    #39577737
xenix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
guest_1234567,

Код: sql
1.
2.
3.
4.
select COUNT(*), ClientID, CourseID from Abonements t1
where CreateDateTime between '20171201' and '20180101'
Group by ClientID, CourseID
HAVING COUNT(*)>=2
...
Рейтинг: 0 / 0
29.12.2017, 10:21
    #39577738
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
guest_1234567,

SELECT COUNT(*)
FROM
(
SELECT COUNT(*), ClientID, CourseID
FROM Abonements t1
WHERE CreateDateTime between '20171201' and '20180101'
GROUP BY ClientID, CourseID
HAVING COUNT(*) > 1
)
...
Рейтинг: 0 / 0
29.12.2017, 10:29
    #39577742
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
guest_1234567,

Новый год с утра :)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT COUNT(*)
FROM
(
SELECT ClientID
FROM Abonements t1
WHERE CreateDateTime between '20171201' and '20180101'
GROUP BY ClientID, CourseID
HAVING COUNT(*) > 1
)
GROUP BY ClientID
 
...
Рейтинг: 0 / 0
29.12.2017, 10:45
    #39577746
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
guest_1234567,


Хотя, если у Вас возможно 2 клиента в 1 период с одним курсом в таблице (мало ли), то лучше так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
DECLARE @T TABLE (ID INT IDENTITY(1,1), ClientID INT, CourseID INT, CreateDateTime DATE)

INSERT @T
VALUES (1,1,'11.12.2017'),
       (2,1,'11.12.2017'),
       (1,3,'11.12.2017'),
       (3,1,'11.12.2017'),
       (1,4,'11.12.2017'),
       (2,3,'11.12.2017')
       

; WITH CTE AS
(
SELECT ClientID, CourseID
FROM @T
WHERE CreateDateTime BETWEEN '11.11.2017' AND '31.12.2017'
GROUP BY ClientID, CourseID
)

SELECT COUNT(*)
FROM 
(
SELECT ClientID 
FROM CTE
GROUP BY ClientID
HAVING COUNT(*) > 1
) Z
...
Рейтинг: 0 / 0
29.12.2017, 10:57
    #39577752
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
Логичнее считать COUNT(DISTINCT CourseID)
...
Рейтинг: 0 / 0
29.12.2017, 11:02
    #39577756
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
iapЛогичнее считать COUNT(DISTINCT CourseID)

в каком месте?

Скрипт есть выше на создание и заполнение...
...
Рейтинг: 0 / 0
29.12.2017, 11:03
    #39577758
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
Goga-GolaiapЛогичнее считать COUNT(DISTINCT CourseID)

в каком месте?

Скрипт есть выше на создание и заполнение...Вместо COUNT(*)
...
Рейтинг: 0 / 0
29.12.2017, 11:07
    #39577761
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
iap,

В моем примере ClientID...
В примере ТС - это не поможет...
Мы же не курсы считаем
...
Рейтинг: 0 / 0
29.12.2017, 11:33
    #39577782
guest_1234567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
Goga-Gola,

авторХотя, если у Вас возможно 2 клиента в 1 период с одним курсом в таблице (мало ли), то лучше так:
Может.
Спасибо! Попробую.
...
Рейтинг: 0 / 0
29.12.2017, 12:38
    #39577823
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
[quot guest_1234567]Goga-Gola,

авторСпасибо! Попробую.

чуть меньше текста с тем же планом выполнения :)


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
; WITH CTE AS
(
SELECT ClientID, CourseID, COUNT(*) OVER (PARTITION BY ClientID) ANumber
FROM @T
WHERE CreateDateTime BETWEEN '01.11.2017' AND '31.12.2017'
GROUP BY ClientID, CourseID
)
SELECT COUNT(DISTINCT ClientID) 
FROM CTE
WHERE ANumber > 1
...
Рейтинг: 0 / 0
29.12.2017, 12:42
    #39577828
Goga-Gola
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет кол-ва абонементов с разными курсами
Goga-Gola,

и даже группировка тут лишняя


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
; WITH CTE AS
(
SELECT ClientID, COUNT(*) OVER (PARTITION BY ClientID) ANumber
FROM @T
WHERE CreateDateTime BETWEEN '11.11.2017' AND '31.12.2017'
)
SELECT COUNT(DISTINCT ClientID) 
FROM CTE
WHERE ANumber > 1




ну, вроде уже все что можно урезал :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подсчет кол-ва абонементов с разными курсами / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]