Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Аггрегация  [new]
relief
Member

Откуда:
Сообщений: 1197
Есть такая таблица

cityType, countryName

в cityType может быть только 2 значения: 1 (больше миллиона) и 2 (меньше)

нужно написать запрос чтобы получились

countryName, MillionCitiesQty, LessMillionCitiesQty

сервер 2005.
предпочтительно это сделать без pivot
20 май 15, 11:04    [17665370]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Добрый Э - Эх
Guest
relief,

CASE
20 май 15, 11:05    [17665372]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Кролик-зануда
Guest
можно еще суммировать 2-cityType и cityType-1 соответственно
20 май 15, 11:10    [17665392]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
relief
Member

Откуда:
Сообщений: 1197
Добрый Э - Эх
relief,

CASE


понимаю, что кэйс, но получается покак только так
select countryName,
case when cityType  = 1 then count(1) end as MillionCitiesQty,
case when cityType  = 2 then count(1) end as LessMillionCitiesQty
from cities


а тут получается по 2 строки на одну страну, а мне нужно в одной строке
20 май 15, 11:11    [17665401]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
понимаю, что кэйс, но получается покак только так

А должно получиться наоборот - case внутри агрегатной функции
20 май 15, 11:13    [17665411]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Добрый Э - Эх
Guest
relief
Добрый Э - Эх
relief,

CASE


понимаю, что кэйс, но получается покак только так
select countryName,
case when cityType  = 1 then count(1) end as MillionCitiesQty,
case when cityType  = 2 then count(1) end as LessMillionCitiesQty
from cities


а тут получается по 2 строки на одну страну, а мне нужно в одной строке
попробуй так:
select countryName,
sum(case when cityType  = 1 then 1 else 0 end) as MillionCitiesQty,
sum(case when cityType  = 2 then 1 else 0 end) as LessMillionCitiesQty
from cities
20 май 15, 11:14    [17665418]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
relief
понимаю, что кэйс, но получается покак только так

?
select countryName,
SUM(case when cityType  = 1 then count(1) end) as MillionCitiesQty,
SUM(case when cityType  = 2 then count(1) end) as LessMillionCitiesQty
from cities
GROUP BY countryName
20 май 15, 11:16    [17665431]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
relief
Member

Откуда:
Сообщений: 1197
Добрый Э - Эх
relief
пропущено...


понимаю, что кэйс, но получается покак только так
select countryName,
case when cityType  = 1 then count(1) end as MillionCitiesQty,
case when cityType  = 2 then count(1) end as LessMillionCitiesQty
from cities


а тут получается по 2 строки на одну страну, а мне нужно в одной строке
попробуй так:
select countryName,
sum(case when cityType  = 1 then 1 else 0 end) as MillionCitiesQty,
sum(case when cityType  = 2 then 1 else 0 end) as LessMillionCitiesQty
from cities


получается 2 строки на каждую страну всё равно
20 май 15, 11:19    [17665451]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Glory
Member

Откуда:
Сообщений: 104751
relief
получается 2 строки на каждую страну всё равно

Вы обманываете. Получается ошибка из-за отсутсnвия group by
20 май 15, 11:21    [17665461]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
angel_zar
relief
понимаю, что кэйс, но получается покак только так

?

COUNT и не заметил

Так
select countryName,
SUM(case when cityType  = 1 then 1 else 0 end) as MillionCitiesQty,
SUM(case when cityType  = 2 then 1 else 0 end) as LessMillionCitiesQty
from cities
GROUP BY countryName
20 май 15, 11:21    [17665463]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
relief
Member

Откуда:
Сообщений: 1197
angel_zar
relief
понимаю, что кэйс, но получается покак только так

?
select countryName,
SUM(case when cityType  = 1 then count(1) end) as MillionCitiesQty,
SUM(case when cityType  = 2 then count(1) end) as LessMillionCitiesQty
from cities
GROUP BY countryName


не работает запрос
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
20 май 15, 11:22    [17665470]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
relief
Member

Откуда:
Сообщений: 1197
сорри, вариант Добрый Э - Эх и angel_zar
работает. забыл из group by удалить лишний столбец

спасибо
20 май 15, 11:24    [17665483]     Ответить | Цитировать Сообщить модератору
 Re: Аггрегация  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21487
SUM(COUNT()) - двойная группировка, недопустимо.
20 май 15, 11:25    [17665490]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить