Случай с 2 ​​столбцами причиняет: & ldquo; Предупреждение: Значение Null исключено агрегатом или другой операцией SET & rdquo; [Дубликат]

Если вы чувствуете, что отрицательные индексы в нарезке сбивают с толку, вот очень простой способ подумать об этом: просто замените отрицательный индекс на len - index. Например, замените -3 на len(list) - 3.

Лучший способ проиллюстрировать, что нарезка делает внутри, просто показывает ее в коде, который реализует эту операцию:

def slice(list, start = None, end = None, step = 1):
  # take care of missing start/end parameters
  start = 0 if start is None else start
  end = len(list) if end is None else end

  # take care of negative start/end parameters
  start = len(list) + start if start < 0 else start
  end = len(list) + end if end < 0 else end

  # now just execute for-loop with start, end and step
  return [list[i] for i in range(start, end, step)]
74
задан Martin Smith 8 July 2012 в 22:07
поделиться

5 ответов

В основном вы будете использовать COUNT для суммирования по UID. Поэтому

COUNT([uid]) выдаст предупреждение:

Внимание: значение Null исключается с помощью агрегата или другой операции SET.

, в то время как используется с левым соединением, где подсчитанный объект не существует.

Использование COUNT(*) в этом случае также приводило бы к неправильным результатам, так как тогда вы считали бы общее количество результатов (т. е. родители), которые существуют.

Использование COUNT([uid]) Является допустимым способом подсчета, и предупреждение является не чем иным, как предупреждением. Однако если вы заинтересованы, и вы хотите получить истинное количество uids в этом случае, вы можете использовать:

SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]

Это не добавило бы много накладных расходов на ваш запрос. (проверено mssql 2008)

79
ответ дан ArtB 25 August 2018 в 23:00
поделиться

Вы хотите поместить ISNULL внутри функции COUNT, а не снаружи:

Не GOOD: ISNULL(COUNT(field), 0)

GOOD: COUNT(ISNULL(field, 0))

6
ответ дан Arulkumar 25 August 2018 в 23:00
поделиться

Использовать ISNULL(field, 0) Его также можно использовать с агрегатами:

ISNULL(count(field), 0)

Однако вы можете рассмотреть возможность изменения count(field) to count(*)

Редактировать:

попробуйте:

closedcases = ISNULL(
   (select count(closed) from ticket       
    where assigned_to = c.user_id and closed is not null       
    group by assigned_to), 0), 

opencases = ISNULL(
    (select count(closed) from ticket 
     where assigned_to = c.user_id and closed is null 
     group by assigned_to), 0),
16
ответ дан Chris Gessler 25 August 2018 в 23:00
поделиться

Если какое-либо значение Null существует внутри агрегатной функции, вы столкнетесь с этой проблемой. Вместо ниже кода

 SELECT Count(closed)
  FROM   ticket
  WHERE  assigned_to = c.user_id
  AND closed IS NULL

используйте как

SELECT Count(ISNULL(closed, 0))
  FROM   ticket
  WHERE  assigned_to = c.user_id
  AND closed IS NULL
-2
ответ дан Maniv 25 August 2018 в 23:00
поделиться

Один из способов решения этой проблемы - отключить предупреждения.

SET ANSI_WARNINGS OFF;
GO
18
ответ дан Mukus 25 August 2018 в 23:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: