Схоже ли несколько столбцов DISTINCT с CONCAT, чтобы сделать его уникальным? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу понять поведение DISTINCT между:

COUNT(DISTINCT t1.id, t1.surcharge_value) AS surcharge_case,

и

  COUNT(
    DISTINCT (
      CASE WHEN t1.surcharge_value != '0.00' THEN CONCAT(t1.id,"_",t1.surcharge_value) END
    )
  ) AS surcharge_case,

Использует ли первый запрос свой собственный CONCAT, поэтому он заканчивается следующим образом.Например: id равно 1 и surcharge_value равно 5.00;поэтому оно становится 15.00?

Если я уберу подчеркивание из второго запроса;CONCAT как первый запрос?

Заранее спасибо.

1 Ответ

0 голосов
/ 04 апреля 2019

первое число отличное (не нулевое) значение для кортежа t1.id, t1.surcharge_value

второй подсчитывает отличное (не нулевое) значение только в том случае, если условие WHEN t1.surcharge_value! = '0.00' равно TRUE, потому что в этом случае возвращается строка
в других случаях возвращает ноль, и это значение не учитывается

в вашей выборке первый retunr 1 (отличный 1, 5,00) означал количество строк с кортежем, не равным NULL Во второй вы проверяете строку и число 5.00! = '0.00' в этом случае всегда! = и
второе возвращаемое значение 1, потому что независимо от значения CONCAT (t1.id, "_", t1.surcharge_value) всегда NOT NULL

но для значения (1, 5,00), (1, 0,00)

первый возврат 2 и второй возврат 1

удаление "_" приводит к тому же результату, только если какое-либо значение для surcharge_value равно! = Из '0.00'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...