powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select count(distinct ...)
8 сообщений из 8, страница 1 из 1
select count(distinct ...)
    #39981063
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Комрады, запутался)

Есть начальный запрос вида:

Код: sql
1.
2.
3.
4.
SELECT TOP 1 A
FROM T
WHERE <дофига условий>
ORDER BY CASE WHEN A = 100 THEN 0 ELSE 1 END, A



Далее потребовалось добавить количество строк:
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER()
FROM T



Все ОК. Далее потребовалось добавить количество различных значений B (COUNT( DISTINCT T.B)):
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER(), COUNT(DISTINCT B)
FROM T



Запрос естественно валиться с ошибкой, что невозможно сделать выборку данных A, т.к. столбец не содержится в стат. функции / GROUP_BY. Как корректно получить количество разных значений B? Разбивать на несколько запросов не вариант, т.к. блок WHERE слишком большой. По идее можно получить через DENSE_RANK(), но не могу придумать как.
Спасибо!
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981099
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

напишите в колонке коррелированный подзапрос, что там надо подсчитать. Или некоррелированный.
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981215
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,

Так там будет бесконечный блок WHERE. Запрос превратиться в кашу. Если только CTE вводить разве что.
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981217
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
Комрады, запутался)

Есть начальный запрос вида:

Код: sql
1.
2.
3.
4.
SELECT TOP 1 A
FROM T
WHERE <дофига условий>
ORDER BY CASE WHEN A = 100 THEN 0 ELSE 1 END, A



Далее потребовалось добавить количество строк:
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER()
FROM T



Все ОК. Далее потребовалось добавить количество различных значений B (COUNT( DISTINCT T.B)):
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER(), COUNT(DISTINCT B)
FROM T



Запрос естественно валиться с ошибкой, что невозможно сделать выборку данных A, т.к. столбец не содержится в стат. функции / GROUP_BY. Как корректно получить количество разных значений B? Разбивать на несколько запросов не вариант, т.к. блок WHERE слишком большой. По идее можно получить через DENSE_RANK(), но не могу придумать как.
Спасибо!


Интересно, пачиму тредстартер напесал:
COUNT(*) OVER(),
, но
COUNT(DISTINCT B).

Наверное, религиозные убеждения?
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981227
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with cte(A, rn) as
(
 select A, row_number() over (partition by B order by 1/0)
 from T
 where <дофига условий>
)
select top (1)
 A, count(*) over (), sum(case when rn = 1 then 1 else 0 end) over ()
from
 cte
order by case when A = 100 then 0 else 1 end, A;
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981346
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Ну вы внимательно читайте, как трансформировался запрос. Как вы напишите
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER()
FROM T


без OVER?

Далее был подключен COUNT (DISTINCT) для объяснения на пальцах, что потребовалось добавить.
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981380
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tketano
aleks222,

Ну вы внимательно читайте, как трансформировался запрос. Как вы напишите
Код: sql
1.
2.
SELECT TOP 1 A, COUNT(*) OVER()
FROM T


без OVER?

Далее был подключен COUNT (DISTINCT) для объяснения на пальцах, что потребовалось добавить.


Как бы тебе сказать то, повежливее?
У меня нет проблем с написанием запросов. В том числе и таких, каких хочет тредстартер.
А вот у тебя, похоже, есть.
...
Рейтинг: 0 / 0
select count(distinct ...)
    #39981697
Tketano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222,

Не пойму.. вы количество комментариев набиваете для профиля? Или хотите поумничать заезженными шутками про "религиозные убеждения"?
авторУ меня нет проблем с написанием запросов. В том числе и таких, каких хочет тредстартер.
А вот у тебя, похоже, есть.
Мы очень рады за вас, держите всех в курсе какой вы умный. Замечательно, что хоть обсуждение на форуме поднимает вашу самооценку.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / select count(distinct ...)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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