Try мышление GROUP BY, как принимая большую кучу строк и положить их на более мелкие сваи, где каждая меньшая куча отождествляются с уникальным значением среди всех групп.
В запросе:
SELECT unt_id
, sum(enteredCode)/count(DISTINCT unt_id) AS 'avg'
FROM tbl_code
GROUP BY unt_id
вы попросили, чтобы все строки, сгруппированные по unt_id и если unt_id имеет 6 различных значений, как 1, 3, 9, 12, 18, 24 (через однако многие строки есть в таблице), у вас будет 6 групп, в которых первая группа состоит из всех строк, где unt_id = 1, вторая группа, где все строки имеют unt_id = 2 и т. д.
Теперь что? Групповые функции, такие как SUM(), COUNT(), AVG(), MAX(), MIN(), будут смотреть на отдельные группы строк и давать вам один результат для каждой группы.
Возвращаясь к вашему запросу, запросив COUNT (DISTINCT unt_id) для, скажем, группы, где unt_id = 3, вы просто получите 1; база данных помещает все строки, где unt_id = 3 в этой группе, поэтому существует только одно отличное значение unt_id. То же самое касается групп 1, 9, 12, 18 и 24; у них есть только один отдельный unt_id в своих группах. (Кстати, заметим, что с помощью этой группировки, MAX (unt_id) = MIN (unt_id) = unt_id для каждой группы.)
Если вы просто рассмотреть:
SELECT unt_id
, count(DISTINCT unt_id) as dist_count
FROM tbl_code
GROUP BY unt_id
вы получите один возвращаемая строка для каждого уникального значения unt_id в ваших данных, а dist_count будет по 1 для каждого из них. Используя этот счет в своем собственном среднем расчете (SUM (введенный код)/COUNT (DISTINCT unt_id)), вы в основном просто делаете SUM (введенный код)/1, поэтому вы видите только сумму.
Когда вы сказали, что «введенный код имеет значение 1», это звучит как 1, это единственное значение, и если бы это было так, то среднее не будет таким захватывающим - это будет всего 1, , Предполагая, что введенный код имеет другие значения, как сказал @bitfiddler, вы можете просто использовать функцию AVG и называть это, считая, что вы хотите найти средний введенный код для всех строк в каждой группе unt_id. (Если вы хотите использовать явный расчет SUM/COUNT для среднего значения, просто помните, что AVG() = SUM()/COUNT() и строки, где null, не рассматриваются.)
Надеюсь, это дает некоторое представление почему вы не получаете результат, который вы намеревались.
Спасибо! Я пробовал это много раз и полностью работает. Я думаю, после прочтения объяснения @Patrick Marchand, я сейчас собираюсь решить вопрос о значении введенного кода. – Avery