MySQL Workbench, среднее значение NULL возвращает «0», мне нужно, чтобы оно возвращало NULL - PullRequest
1 голос
/ 26 сентября 2019

Я пытаюсь усреднить данные уровня моего графика.Когда я выполняю свой запрос на уровне графика, он выдает «NULL» для всех строк, связанных с некоторыми именами строк.Когда я выполняю тот же запрос, пытаясь AVG черты и группы по имени строки, результат показывает «0».Мне нужно, чтобы оно показывало «NULL», чтобы оно не влияло на мое среднее значение.

Пример кода для выбора данных на уровне графика:

SELECT experiment_name, `year`, location_name, line_name, head_dap, height_cm, yield_bua
FROM data_amba
WHERE experiment_name = 'matspr' AND `year` = 2018 AND location_name = 'Stephen'
GROUP BY line_name, head_dap, height_cm, yield_bua;

Результаты:

+------------+----------+-----------+-----------+
| line_name  | head_dap | height_cm | yield_bua |
+------------+----------+-----------+-----------+
| ND_GENESIS | NULL     | NULL      | 130.9     |
+------------+----------+-----------+-----------+
| ND_GENESIS | NULL     | NULL      | 131.3     |
+------------+----------+-----------+-----------+
| ND_GENESIS | NULL     | NULL      | 134.3     |
+------------+----------+-----------+-----------+
| PINNACLE   | NULL     | NULL      | 144.9     |
+------------+----------+-----------+-----------+
| PINNACLE   | NULL     | NULL      | 146.6     |
+------------+----------+-----------+-----------+
| PINNACLE   | NULL     | NULL      | 163.9     |
+------------+----------+-----------+-----------+
| S2M177     | NULL     | NULL      | 107.6     |
+------------+----------+-----------+-----------+
| S2M177     | NULL     | NULL      | 142.6     |
+------------+----------+-----------+-----------+
| S2M177     | NULL     | NULL      | 168.6     |
+------------+----------+-----------+-----------+
| S2M178     | NULL     | NULL      | 114.6     |
+------------+----------+-----------+-----------+
| S2M178     | NULL     | NULL      | 132.9     |
+------------+----------+-----------+-----------+
| S2M178     | NULL     | NULL      | 154.6     |
+------------+----------+-----------+-----------+
| S2M179     | NULL     | NULL      | 132.6     |
+------------+----------+-----------+-----------+
| S2M179     | NULL     | NULL      | 137.9     |
+------------+----------+-----------+-----------+
| S2M179     | NULL     | NULL      | 140.6     |
+------------+----------+-----------+-----------+
| S2M180     | NULL     | NULL      | 101.9     |
+------------+----------+-----------+-----------+
| S2M180     | NULL     | NULL      | 147.3     |
+------------+----------+-----------+-----------+
| S2M180     | NULL     | NULL      | 169.6     |
+------------+----------+-----------+-----------+
| S2M181     | NULL     | NULL      | 111.9     |
+------------+----------+-----------+-----------+
| S2M181     | NULL     | NULL      | 125.3     |
+------------+----------+-----------+-----------+
| S2M181     | NULL     | NULL      | 138.9     |
+------------+----------+-----------+-----------+

Пример кода для выбора средних:

SELECT experiment_name, `year`, location_name, line_name, AVG(head_dap), AVG(height_cm), AVG(yield_bua)
FROM data_amba
WHERE experiment_name = 'matspr' AND `year` = 2018 AND location_name = 'Stephen'
GROUP BY line_name;

Результаты:

+------------+---------------+----------------+----------------+
| line_name  | AVG(head_dap) | AVG(height_cm) | AVG(yield_bua) |
+------------+---------------+----------------+----------------+
| ND_GENESIS | 0             | 0              | 132.1667       |
+------------+---------------+----------------+----------------+
| PINNACLE   | 0             | 0              | 151.8          |
+------------+---------------+----------------+----------------+
| S2M177     | 0             | 0              | 139.6          |
+------------+---------------+----------------+----------------+
| S2M178     | 0             | 0              | 134.0333       |
+------------+---------------+----------------+----------------+
| S2M179     | 0             | 0              | 137.0333       |
+------------+---------------+----------------+----------------+
| S2M180     | 0             | 0              | 139.6          |
+------------+---------------+----------------+----------------+
| S2M181     | 0             | 0              | 125.3667       |
+------------+---------------+----------------+----------------+

Когда 3 значения «NULL» усредняются, я ожидаю увидеть «NULL» в результатах, а не «0», так что это не повлияет на вычисления среднего значения, которые я выполняю вниз по течению.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Самый простой обходной путь, который я могу придумать, - это использовать функцию NULLIF -

SELECT experiment_name
      ,`year`
      ,location_name
      ,line_name
      ,NULLIF(AVG(head_dap), 0)
      ,NULLIF(AVG(height_cm), 0)
      ,NULLIF(AVG(yield_bua), 0)
FROM data_amba
WHERE experiment_name = 'matspr'
AND `year` = 2018
AND location_name = 'Stephen'
GROUP BY line_name;
0 голосов
/ 26 сентября 2019

Это может быть поведение MySQL WorkBench, чтобы показывать ноль для целочисленного поля. Когда я запускаю то же самое в SqlFiddle , оно показывает ноль в случае, если все строки равны нулю , принадлежащих категории.

...