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

Откуда:
Сообщений: 10
Ознакомившись с типами MS SQL server, решил использовать для хранения некоторых данных тип bit... но недавно столкнулся с проблемой. Как определить превалирование одного логического
состояния над другим?

Есть таблица:

CREATE TABLE TestBits([TestBit] [bit])

Как в ней определить каких битов больше - true или false?
10 май 11, 16:43    [10630627]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndreyRus
Как в ней определить каких битов больше - true или false?

Битов или записей с определенными значения поля [TestBit] ?
10 май 11, 16:46    [10630643]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
Glory
AndreyRus
Как в ней определить каких битов больше - true или false?

Битов или записей с определенными значения поля [TestBit] ?
А есть разница?
10 май 11, 16:51    [10630672]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
AndreyRus
Ознакомившись с типами MS SQL server, решил использовать для хранения некоторых данных тип bit... но недавно столкнулся с проблемой. Как определить превалирование одного логического
состояния над другим?

Есть таблица:

CREATE TABLE TestBits([TestBit] [bit])

Как в ней определить каких битов больше - true или false?
Например sum(convert(int, поле))
или cast
10 май 11, 16:53    [10630689]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
AndreyRus
Glory
Битов или записей с определенными значения поля [TestBit] ?
А есть разница?
Конечно есть, в записи типа bit может быть не 1 и не 0.
10 май 11, 16:55    [10630705]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
Glory
Member

Откуда:
Сообщений: 104751
select count(*)
from TestBits
group by TestBit
10 май 11, 16:55    [10630706]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
Glory
Member

Откуда:
Сообщений: 104751
AndreyRus
Glory
пропущено...

Битов или записей с определенными значения поля [TestBit] ?
А есть разница?

Разумеется. Для простого подсчета записей агрегатной функции не нужно никакое поле
10 май 11, 16:56    [10630716]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Glory,

видимо агрегатная функцию определенные операции делает и выдает результат
10 май 11, 17:08    [10630793]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
Glory
Member

Откуда:
Сообщений: 104751
orunbek
Glory,

видимо агрегатная функцию определенные операции делает и выдает результат

Ну так смотри мой первый вопрос
10 май 11, 17:10    [10630805]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
У меня есть вариант, но он какой то "некошерный":
select sum(case [TestBit] when 0 then -1 else 1 end) from TestBits
10 май 11, 17:25    [10630915]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
"Некошерный" в смысле того, что возвращает отрицательное число при превалировании false в столбце, что в чистых терминах не является false, то биш 0. Странно, конечно, что не встроенной функции для анализа подобных данных...
10 май 11, 18:41    [10631306]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus,

какого анализа? Вы что хотите получить-то в итоге?
10 май 11, 18:44    [10631316]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
iljy
Вы что хотите получить-то в итоге?

Каких бит в столбце больше.
10 май 11, 18:48    [10631335]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus,

ну так посчитайте количество 1, 0 и NULL и сравните, чего больше
10 май 11, 18:50    [10631343]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
iljy
ну так посчитайте количество 1, 0 и NULL и сравните, чего больше
А как это сделать на T-SQL, что бы результатом было Булево значение?
10 май 11, 18:53    [10631357]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus,

в TSQL нет булевых значений.
10 май 11, 18:56    [10631373]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
iljy
в TSQL нет булевых значений.
Пусть это будет тип - Bit(0 - false. 1 - true).
10 май 11, 18:58    [10631384]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus,

declare @t table(x bit)
insert @t values(0),(1),(0),(null),(1),(null),(null)

select CAST(case when s1 > s2 and s1 > s3 then 1 when s2 > s3 then 0 end as bit)
from(
	select SUM(case x when 1 then 1 else 0 end) s1,
		SUM(case x when 0 then 1 else 0 end) s2,
		SUM(case when x is null then 1 else 0 end) s3
	from @t
)t
А если поровну?
10 май 11, 19:03    [10631415]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
iljy
А если поровну?
Тогда как в школе - округляем в сторону большего.
10 май 11, 19:59    [10631638]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus,

тогда замените неравенства на нестрогие.
10 май 11, 20:32    [10631778]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
AndreyRus
Member

Откуда:
Сообщений: 10
iljy
тогда замените неравенства на нестрогие.
Позвольте, полюбопытствовать. А как это сделать в рамках TSQL?
10 май 11, 21:45    [10631996]     Ответить | Цитировать Сообщить модератору
 Re: Тип поля Bit в агрегатных функциях.  [new]
iljy
Member

Откуда:
Сообщений: 8711
AndreyRus
iljy
тогда замените неравенства на нестрогие.
Позвольте, полюбопытствовать. А как это сделать в рамках TSQL?

Вот я прям даже растерялся как-то... Может быть заменить s1>s2 на s1>=s2? И далее по индукции?
10 май 11, 22:03    [10632043]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить