SQL Case MAX КОГДА НРАВИТСЯ - PullRequest
       12

SQL Case MAX КОГДА НРАВИТСЯ

0 голосов
/ 28 августа 2018

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

Я не уверен, как написать оператор case, используя CASE (псевдокод)

WHEN MAX Total_Revenue COMPANY like 'ABC%'
else COMPANY

Я пробовал рейтинг, но он не работает:

,RANK() OVER(COMPANY LIKE 'DEF%' ORDER BY  Total_Revenue DESC) AS grp

Текущая таблица:

Company    Total_Revenue
ABC        10
DEF1       25 --This row will NOT be selected as its less than
DEF2       35 -- this row will be kept    
GHI3       65
JKL9       100  

Выходной стол:

Company    Total_Revenue
ABC        10
DEF2       35     --kept 
GHI3       65
JKL9       100  

Ответы [ 4 ]

0 голосов
/ 28 августа 2018

Существует довольно много способов сделать то, на что, похоже, вы рассчитываете:

Использование подзапроса для определения максимального дохода для каждого компа:

SELECT Company, Total_Revenue
FROM myTable
  INNER JOIN 
    (
      SELECT Left(Company, 3) as leftcomp, 
        max(Total_Revenue) as maxTotalRevenue
      FROM mytable
      GROUP BY Left(Company, 3) 
    ) mt
    ON Left(myTable.Company, 3) = mt.leftcomp
    AND myTable.Total_Revenue = mt.maxTotalRevenue;

Функция окна, которая позже фильтруется по Where:

SELECT *
FROM
  (
    SELECT Company, 
      Total_Revenue,
      MAX(Total_Revenue) OVER (PARTITION BY Left(Company, 3)) as maxTotalRevenue
    FROM myTable
  ) mt
 WHERE Total_Revenue = maxTotalRevenue;

Коррелированный подзапрос в предложении WHERE:

 SELECT *
 FROM myTable mt1
 Where Total_Revenue =
   (
     SELECT max(total_revenue)
     FROM myTable
     WHERE Left(myTable.Company, 3) = Left(mt1.Company, 3)
   );

SQLFiddle здесь

0 голосов
/ 28 августа 2018

использовать статистическую функцию max () и подзапрос

    select * from Yourtable t1
 where t1.Total_Revenue in (

  select max(T.Total_Revenue ) as Total_Revenue from
   ( 
   select case when Company like'%DEF%' then 'DEF'
   else Company end as Company , 
    Total_Revenue from Yourtable
   ) as T
    group by T.Company
   )

http://sqlfiddle.com/#!18/e896c/5

    Company  Total_Revenue
     ABC      10
     DEF2     35
     GHI3     65
     JKL9     100
0 голосов
/ 28 августа 2018

Это то, что вы хотите?

select * from t
where
Company not in (
    select Company from t where Company like '%DEF%' order by Company desc offset 1 
)
0 голосов
/ 28 августа 2018

Вы, кажется, хотите row_number() функция:

SELECT t.*
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY LEFT(Company, 3) ORDER BY Total_Revenue DESC) AS Seq
      FROM table t
     ) t
WHERE Seq =  1;
...