Количество выбранных SQL (значение =Value) Возможно?

#sql #sql-server #select #count

#sql #sql-сервер #выберите #количество

Вопрос:

Я хочу посчитать все строки, которые имеют только то значение, которое я хочу, вот так:

 SELECT Users.Balance,
       Users.FreeBids,
       COUNT(Bids.Burned = 0) AS 'ActiveBids',
       COUNT(Bids.Burned = 1) AS 'BurnedBids'
FROM   Users
       INNER JOIN Bids
         ON Users.ID = Bids.BidderID
WHERE  Users.ID = 2
GROUP  BY Users.Balance,
          Users.FreeBids  
  

В нем говорится, что « Invalid Syntax Neat '=' Это отлично работает без ‘=’.
Как я могу посчитать строки, которые записали = 1 в них и записали = 0 в них?

Спасибо, Дэн

Ответ №1:

Используйте CASE инструкцию

 COUNT(CASE WHEN Bids.Burned=0 THEN 1 END) AS 'ActiveBids', 
COUNT(CASE WHEN Bids.Burned=1 THEN 1 END) AS 'BurnedBids'
  

Существует неявное ELSE NULL . COUNT учитываются NOT NULL только значения, поэтому это даст вам нужный результат.

Комментарии:

1. Я предпочитаю использовать SUM в этом случае с ELSE 0 в инструкции case, чтобы исключить предупреждение «Нулевое значение, устраненное aggregate», которое вызывает этот код.

2. @Danpe — COUNT(NULLIF(Bids.Burned,1)) и COUNT(NULLIF(Bids.Burned,0)) если единственными допустимыми значениями в этом столбце являются 0,1 и, возможно NULL , являются.

3. @Dave — Не думал, что COUNT поднимал этот вопрос, но, по-видимому, это так. Да, это еще один вариант, если предупреждения вызывают какие-либо проблемы.

4. @Martin Спасибо, более короткая версия работает 🙂 и где я вижу предупреждения? И должны ли они меня беспокоить?

5. @Danpe — Они отображаются на вкладке сообщений в SSMS, если у вас ANSI_WARNINGS включено (что вы почти наверняка сделаете). Это информационные предупреждения, а не ошибки. Они никогда не беспокоили меня, но я полагаю, что обратная передача сообщения вашему приложению может иметь небольшие накладные расходы.