Значения SUM, основанные на разных значениях другого столбца - PullRequest
1 голос
/ 03 июля 2019

У меня есть таблица:

Sales ID
100   a
100   a
103.5 c
105   d
105   d

.... Я хочу просто получить значение 308,5 (то есть 100 + 103,5 + 105, уникальные значения).

Я пробовал это:

select sum(case when rownum=1 then sales end) from 
(select sales,id, row_number() over (partition  by id) as rownum from table) subquery

Но каждый раз, когда я обновляю его, я получаю другое значение.

Какой альтернативный способ?

Ответы [ 4 ]

0 голосов
/ 04 июля 2019

Требуется сумма продаж от разных пар продаж и идентификатор:

select sum(t.sales) from (
  select distinct sales, id
  from table
) t

или:

select sum(t.sales) from (
  select sales from table
  group by sales, id
) t
0 голосов
/ 03 июля 2019

Вы можете использовать подзапрос для отдельных продаж

    select sum(t.distinct_sales)
    from  (
        select distinct Sales as distinct_sales
        FROM my_table
    ) t 
0 голосов
/ 04 июля 2019

Вам придется отключиться, запустив сначала SELECT DISTINCT, а затем SUM () - ming.Вот так:

WITH
-- this is your input - don't use in real query
input(Sales,ID) AS (
          SELECT 100,'a'
UNION ALL SELECT 100,'a'
UNION ALL SELECT 103.5,'c'
UNION ALL SELECT 105,'d'
UNION ALL SELECT 105,'d'
)
, -- < - replace this comma with "WITH", and start the real query here ...
uq (sales) AS (
  SELECT DISTINCT
    sales
  FROM input
)
SELECT
  SUM(sales)
FROM uq;
-- out   SUM  
-- out -------
-- out  308.5
-- out (1 row)
-- out 
-- out Time: First fetch (1 row): 7.795 ms. All rows formatted: 7.826 ms


-- if ( 100 , 'a' ) is different from ( 100 , 'd' ), then it would be the below

WITH
-- this is your input - don't use in real query
input(Sales,ID) AS (
          SELECT 100,'a'
UNION ALL SELECT 100,'a'
UNION ALL SELECT 103.5,'c'
UNION ALL SELECT 105,'d'
UNION ALL SELECT 105,'d'
)
, -- < - replace this comma with "WITH", and start the real query here ...
uq (sales,id) AS (
  SELECT DISTINCT
    sales
  , id
  FROM input
)
SELECT
  SUM(sales)
FROM uq;
-- out   SUM  
-- out -------
-- out  308.5
-- out (1 row)
-- out 
-- out Time: First fetch (1 row): 11.084 ms. All rows formatted: 11.117 ms
0 голосов
/ 03 июля 2019

Но каждый раз, когда я обновляю его, я получаю другое значение.

Это предполагает, что базовые данные изменяются, что маловероятно для Vertica. Или более вероятно, что у вас есть несколько значений для одного идентификатора. Вы можете проверить последнее:

select id, count(distinct sales)
from t
where min(sales) <> max(sales);
...