2016-03-21 2 views
0

Я пытаюсь вычислить среднее значение, min, max, total, count, но я получаю неправильный результат.select avg(), min(), max(), toatl(), count() выбранного результата

SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy , 
    AVG(t0.brandID) AS brandID_AVERAGE, 
    min(t0.brandid) as branid_min, 
    MAX(t0.brandid) as brandid_max, 
    COUNT(t0.brandid) as brandid_count  
    FROM brands t0 
    Where t0. brandID=null OR t0. brandName='khasim' 
    group by t0.brandID,t0.brandName,t0.cdt,t0.udt,t0.brandstatus,t0.AddedBy 


select AVG(CAST (brandID AS bigint)) AS brandID_AVERAGE, 
    min(CAST (brandID AS bigint)) as branid_min, 
    MAX(CAST (brandID AS bigint)) as brandid_max, 
    COUNT(CAST (brandID AS bigint)) as brandid_count from 
    (SELECT t0.brandID, t0.brandName, t0.cdt, t0.udt, t0.brandstatus, t0.AddedBy 

    FROM brands t0 
    Where t0. brandID=null OR t0. brandName='budwieser' 
    group by t0.brandID,t0.brandName,t0.cdt,t0.udt,t0.brandstatus,t0.AddedBy) temptable 

я изменил мой запрос, чтобы выбрать среды и т.д. для результата выбора Теперь я получаю то, что я ожидал, но я хочу, чтобы показать все выбранные столбцы в один столе, как это сделать.

ожидаемый результат enter image description here

результат для приведенного выше запроса enter image description here

+3

заменить t0.brandid = null to is null – TheGameiswar

+0

@TheGameiswar, убедитесь, что это 't0.brandId is null. Пространство между 'is' и' null' важно. – SlimsGhost

+0

Да, это был тип, я его отредактировал давно – TheGameiswar

ответ

0

Ваш первый запрос, где вы возвращение один ряд выглядит правильно. Ваш второй скриншот, в котором вы получаете много строк, выглядит так: вы используете WINDOWING функции (т. Е. Что-либо с предложением OVER). Это не агрегирует данные, оно возвращает все строки и повторяет вычисления по набору, возвращая каждую строку.

Можете ли вы включить полный текст запроса, который создает неверный результат?

Кроме того, это может быть вызвано brandId, являющимся типом integer, и в этом случае все вычисления на нем будут использовать целочисленную арифметику (т. Е. Без дробей). Это нормально, если вы ожидаете только целых результатов, но если вам нужны фракции, попробуйте использовать CAST для преобразования всех вхождений brandid в десятичные типы, например: CAST(brandId as decimal(18, 8)) перед выполнением AVG и другими расчетами.

0

Во-первых. Из моих лучших знаний в SQL null не равен нулю. Поэтому вам нужно использовать is null, чтобы проверить, что значение равно null. Во-вторых. Не могли бы вы объяснить, что не так с подчеркнутыми значениями?

+0

Я обновил свой запрос и ожидаемый результат. Можете ли вы помочь? – Tan

+0

Похоже, вы можете получить ожидаемые результаты, если вы группируете только столбец 'brandName' –

+0

Я создаю запрос на основе пользователя если я не добавляю группу по всем выбранным столбцам, я получаю ошибку, поэтому я группирую все выбранные столбцы. как сделать объединение обоих и показать в одной таблице. – Tan

Смежные вопросы