Запрос на подсчет столбца с битом типа данных - PullRequest
1 голос
/ 13 мая 2011

У меня есть проверка имени столбца с битом типа данных (true или False). Я хочу подсчитать, сколько в столбце false и true.

SELECT 
COUNT(FeatureState) AS tot_true, 
COUNT(*)-COUNT(FeatureState) AS tot_false
FROM productDetail
 WHERE FeatureState= 1

Это работает

Ответы [ 4 ]

4 голосов
/ 13 мая 2011

Как насчет;

SELECT 
  COUNT(CASE fld WHEN 0 THEN 1 ELSE NULL END) AS ZEROS,
  COUNT(CASE fld WHEN 1 THEN 1 ELSE NULL END) AS ONES
FROM
  T

--alternative

SELECT 
  SUM(CASE fld WHEN 0 THEN 1 ELSE 0 END) AS ZEROS,
  SUM(CASE fld WHEN 1 THEN 1 ELSE 0 END) AS ONES
FROM
  T
2 голосов
/ 13 мая 2011

Я использовал SIGN, чтобы изменить бит на int

SELECT 
    SUM(SIGN(field)) AS tot_true, 
    SUM(1-SIGN(field)) AS tot_false
FROM table

Или используйте тот факт, что COUNT игнорирует NULL

SELECT 
    COUNT(NULLIF(field, 0)) AS tot_true, 
    COUNT(NULLIF(field, 1)) AS tot_false
FROM table

Это работает, если вам нужны другие значения MAX (SomeOtherField), где самые высокие значения получены из "ложных" строк, отфильтрованных в других решениях

2 голосов
/ 13 мая 2011
SELECT 
SUM(CASE WHEN FeatureState = 1     THEN 1 ELSE 0 END) AS TrueCount,
SUM(CASE WHEN FeatureState = 0     THEN 1 ELSE 0 END) AS FalseCount,
SUM(CASE WHEN FeatureState IS NULL THEN 1 ELSE 0 END) AS NullCount,
COUNT(1)                                              AS TotalCount
FROM ProductDetail
2 голосов
/ 13 мая 2011

Попробуйте, должно работать:

SELECT 
    COUNT(field) AS tot_true, 
    COUNT(*)-COUNT(field) AS tot_false
FROM table
WHERE field=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...