Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
есть запрос:
select
  пл.дата_плат, пл.сумма
from
  платежи пл



having sum(пл.сумма) > 15000 
group by пл.дата_плат, пл.сумма
-- order by сумма asc --
order by пл.дата_плат desc
который возвращает 1447 записей

и почти аналогичный запрос:
select
  пл.дата_плат, пл.сумма, пл.пп_код
from
  платежи пл



having sum(пл.сумма) > 15000 
group by пл.дата_плат, пл.сумма, пл.пп_код
-- order by сумма asc --
order by пл.дата_плат desc
возвращает 897 записей

не пойму в чем беда??? мне нужно выполнить первый запрос, чтобы в результирующей выборке был пп_код
26 авг 10, 14:33    [9330406]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
может джоины нужны???
26 авг 10, 14:34    [9330415]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
swipe

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


Беда, видимо, в непонимании что такое having и к чему применяется.

Сформулируйте для себя нормально свою задачу.
И простой вопрос, если у вас за одну дату по 10 разным пп_код в сумме набирается сумма больше 15000, то который из 10 пп_код должен быть в выборке?
26 авг 10, 14:41    [9330493]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
мне нужно выбрать пп_код -ы где за кажду. дату было сделано платежей в сумме > 15000
26 авг 10, 14:45    [9330552]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
swipe
может джоины нужны???


Я так думаю, нужно почитать документацию или хорошую книжку по SQL, чтобы разобраться, что делают SUM(), GROUP BY и HAVING. А потом, возможно, почитать про аналитические функции...
26 авг 10, 14:47    [9330592]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
swipe,

Где-то тут пробегала ссылочка товарисча AmKad, вот такая
Приведите пример что у вас есть, что ожидаете получить
26 авг 10, 14:53    [9330654]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
OmegaMale
Member

Откуда: воткуда
Сообщений: 201
env,

потому что вторая группировка более детальная - больше столбцов, потому суммируются меньшими группами, потому суммы агрегированные меньше и некоторые не попадают по условию HAVING.
очевидно
26 авг 10, 15:24    [9331072]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
OmegaMale,

Слышали звон....
Мне то вы к чему это пытаетесь сообщить? У ТС явное непонимание что такое having и сложности с формулировкой задачи для самого себя, отсюда и вопрос как таковой.
26 авг 10, 15:29    [9331123]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
прилагаю рисунок ... есть таблица ПЛАТЕЖИ и представление ПР_ПАЧКИ

как из них сделать результирующую выборку RESULT

я пробовал так:
select

  пл.лскв_код,
  пл.дата_плат,
  пл.сумма,
  прпчк.по_наименование
  
from
  
  платежи пл,
  пр_пачки прпчк
  
where
  пл.пп_код = прпчк.код
  
having sum(пл.сумма) > 15000 

group by пл.лскв_код, пл.дата_плат, пл.сумма, прпчк.по_наименование



К сообщению приложен файл. Размер - 0Kb
26 авг 10, 15:43    [9331270]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
OmegaMale
Member

Откуда: воткуда
Сообщений: 201
env,

да, это я не Вам, просто по привычке нажимаю на нижнее "ответить" :) Просто, ИМХО, я и сам, бывает, туплю в очевидных местах, и потому не всегда прочтение/перечтение доки помогает... обычно помогает здоровый сон.
26 авг 10, 15:44    [9331275]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
suPPLer
Member

Откуда: Харків, Україна
Сообщений: 7794
Блог
swipe,

значит, пришла пора читать про аналитические функции.
26 авг 10, 15:46    [9331295]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
OmegaMale
Member

Откуда: воткуда
Сообщений: 201
swipe,

группируете по сумме... для чего? потому и не получается
26 авг 10, 15:47    [9331303]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
paveloder
Member

Откуда:
Сообщений: 59
OmegaMale,

select s.дата_плат
       s.сумма
       s.пп_код
  from (select
          пл.дата_плат
         ,SUM(пл.сумма) OVER (PARTITION BY пл.дата_плат) сумма
         ,пл.пп_код
        from
          платежи пл
       ) s 
 where s.сумма > 15000
order by s.сумма desc      

Может так?
26 авг 10, 15:56    [9331395]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
swipe,

select

  пл.лскв_код,
  пл.дата_плат,
   SUM(пл.сумма) sum_, 
  прпчк.по_наименование
  
from
  
  платежи пл,
  пр_пачки прпчк
  
where
  пл.пп_код = прпчк.код
  
having sum(пл.сумма) > 15000 

group by пл.лскв_код, пл.дата_плат,  /*пл.сумма, */ 
            прпчк.по_наименование
26 авг 10, 15:58    [9331413]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
Поторопился.
Да, смотрите на аналитику в данном случае.
26 авг 10, 15:59    [9331428]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
env
swipe,

select

  пл.лскв_код,
  пл.дата_плат,
   SUM(пл.сумма) sum_, 
  прпчк.по_наименование
  
from
  
  платежи пл,
  пр_пачки прпчк
  
where
  пл.пп_код = прпчк.код
  
having sum(пл.сумма) > 15000 

group by пл.лскв_код, пл.дата_плат,  /*пл.сумма, */ 
            прпчк.по_наименование


я так пробовал... результат не тот
26 авг 10, 16:17    [9331631]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
swipe,

WITH platezhi AS (SELECT 1 kod, to_date('26.08.2010','dd.mm.yyyy') data_platezha, 10000 summa, 205 lskv_kod, 1 pp_kod FROM DUAL UNION ALL
                  SELECT 2, to_date('26.08.2010','dd.mm.yyyy'), 12000, 205, 2 FROM DUAL UNION ALL
                  SELECT 3, to_date('26.08.2010','dd.mm.yyyy'), 1900, 206, 1 FROM DUAL UNION ALL
                  SELECT 4, to_date('26.08.2010','dd.mm.yyyy'), 100, 206, 2 FROM DUAL UNION ALL
                  SELECT 5, to_date('27.08.2010','dd.mm.yyyy'), 14000, 205, 1 FROM DUAL UNION ALL
                  SELECT 6, to_date('27.08.2010','dd.mm.yyyy'), 14500, 206, 1 FROM DUAL UNION ALL
                  SELECT 7, to_date('27.08.2010','dd.mm.yyyy'), 1000, 206, 3 FROM DUAL UNION ALL
                  SELECT 8, to_date('28.08.2010','dd.mm.yyyy'), 17990, 207, 4 FROM DUAL UNION ALL
                  SELECT 9, to_date('28.08.2010','dd.mm.yyyy'), 900, 208, 2 FROM DUAL )
    ,pr_pachki AS (SELECT 1 kod, 'aaa' naimenovanie FROM DUAL UNION ALL
                   SELECT 2, 'bbb' FROM DUAL UNION ALL
                   SELECT 3, 'ccc' FROM DUAL UNION ALL
                   SELECT 4, 'ddd' FROM DUAL)
SELECT lskv_kod, data_platezha, summa, naimenovanie 
  FROM (SELECT p.lskv_kod, p.data_platezha, p.summa, SUM(summa) OVER (PARTITION BY p.lskv_kod, p.data_platezha) summ, pp.naimenovanie
          FROM platezhi p, pr_pachki pp
         WHERE p.pp_kod=pp.kod)
 WHERE summ>15000

26 авг 10, 16:20    [9331667]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
zhal
swipe,

WITH platezhi AS (SELECT 1 kod, to_date('26.08.2010','dd.mm.yyyy') data_platezha, 10000 summa, 205 lskv_kod, 1 pp_kod FROM DUAL UNION ALL
                  SELECT 2, to_date('26.08.2010','dd.mm.yyyy'), 12000, 205, 2 FROM DUAL UNION ALL
                  SELECT 3, to_date('26.08.2010','dd.mm.yyyy'), 1900, 206, 1 FROM DUAL UNION ALL
                  SELECT 4, to_date('26.08.2010','dd.mm.yyyy'), 100, 206, 2 FROM DUAL UNION ALL
                  SELECT 5, to_date('27.08.2010','dd.mm.yyyy'), 14000, 205, 1 FROM DUAL UNION ALL
                  SELECT 6, to_date('27.08.2010','dd.mm.yyyy'), 14500, 206, 1 FROM DUAL UNION ALL
                  SELECT 7, to_date('27.08.2010','dd.mm.yyyy'), 1000, 206, 3 FROM DUAL UNION ALL
                  SELECT 8, to_date('28.08.2010','dd.mm.yyyy'), 17990, 207, 4 FROM DUAL UNION ALL
                  SELECT 9, to_date('28.08.2010','dd.mm.yyyy'), 900, 208, 2 FROM DUAL )
    ,pr_pachki AS (SELECT 1 kod, 'aaa' naimenovanie FROM DUAL UNION ALL
                   SELECT 2, 'bbb' FROM DUAL UNION ALL
                   SELECT 3, 'ccc' FROM DUAL UNION ALL
                   SELECT 4, 'ddd' FROM DUAL)
SELECT lskv_kod, data_platezha, summa, naimenovanie 
  FROM (SELECT p.lskv_kod, p.data_platezha, p.summa, SUM(summa) OVER (PARTITION BY p.lskv_kod, p.data_platezha) summ, pp.naimenovanie
          FROM platezhi p, pr_pachki pp
         WHERE p.pp_kod=pp.kod)
 WHERE summ>15000




xDDDDDDDDDDDDDDDDD
0 row selected
26 авг 10, 16:27    [9331748]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
swipe

xDDDDDDDDDDDDDDDDD
0 row selected


Не знаю. У меня вот

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
Connected as balls


SQL> 
SQL> WITH platezhi AS (SELECT 1 kod, to_date('26.08.2010','dd.mm.yyyy') data_platezha, 10000 summa, 205 lskv_kod, 1 pp_kod FROM DUAL UNION ALL
  2                    SELECT 2, to_date('26.08.2010','dd.mm.yyyy'), 12000, 205, 2 FROM DUAL UNION ALL
  3                    SELECT 3, to_date('26.08.2010','dd.mm.yyyy'), 1900, 206, 1 FROM DUAL UNION ALL
  4                    SELECT 4, to_date('26.08.2010','dd.mm.yyyy'), 100, 206, 2 FROM DUAL UNION ALL
  5                    SELECT 5, to_date('27.08.2010','dd.mm.yyyy'), 14000, 205, 1 FROM DUAL UNION ALL
  6                    SELECT 6, to_date('27.08.2010','dd.mm.yyyy'), 14500, 206, 1 FROM DUAL UNION ALL
  7                    SELECT 7, to_date('27.08.2010','dd.mm.yyyy'), 1000, 206, 3 FROM DUAL UNION ALL
  8                    SELECT 8, to_date('28.08.2010','dd.mm.yyyy'), 17990, 207, 4 FROM DUAL UNION ALL
  9                    SELECT 9, to_date('28.08.2010','dd.mm.yyyy'), 900, 208, 2 FROM DUAL )
 10      ,pr_pachki AS (SELECT 1 kod, 'aaa' naimenovanie FROM DUAL UNION ALL
 11                     SELECT 2, 'bbb' FROM DUAL UNION ALL
 12                     SELECT 3, 'ccc' FROM DUAL UNION ALL
 13                     SELECT 4, 'ddd' FROM DUAL)
 14  SELECT lskv_kod, data_platezha, summa, naimenovanie
 15    FROM (SELECT p.lskv_kod, p.data_platezha, p.summa, SUM(summa) OVER (PARTITION BY p.lskv_kod, p.data_platezha) summ, pp.naimenovanie
 16            FROM platezhi p, pr_pachki pp
 17           WHERE p.pp_kod=pp.kod)
 18   WHERE summ>15000
 19  /

  LSKV_KOD DATA_PLATEZHA      SUMMA NAIMENOVANIE
---------- ------------- ---------- ------------
       205 26.08.2010         10000 aaa
       205 26.08.2010         12000 bbb
       206 27.08.2010         14500 aaa
       206 27.08.2010          1000 ccc
       207 28.08.2010         17990 ddd

SQL> 
26 авг 10, 16:30    [9331791]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 6740
swipe,

По вашим данным или по данному примеру?

SQL> WITH platezhi AS (SELECT 1 kod, to_date('26.08.2010','dd.mm.yyyy') data_platezha, 10000 summa, 205 lskv_kod, 1 pp_k
od FROM DUAL UNION ALL
  2                    SELECT 2, to_date('26.08.2010','dd.mm.yyyy'), 12000, 205, 2 FROM DUAL UNION ALL
  3                    SELECT 3, to_date('26.08.2010','dd.mm.yyyy'), 1900, 206, 1 FROM DUAL UNION ALL
  4                    SELECT 4, to_date('26.08.2010','dd.mm.yyyy'), 100, 206, 2 FROM DUAL UNION ALL
  5                    SELECT 5, to_date('27.08.2010','dd.mm.yyyy'), 14000, 205, 1 FROM DUAL UNION ALL
  6                    SELECT 6, to_date('27.08.2010','dd.mm.yyyy'), 14500, 206, 1 FROM DUAL UNION ALL
  7                    SELECT 7, to_date('27.08.2010','dd.mm.yyyy'), 1000, 206, 3 FROM DUAL UNION ALL
  8                    SELECT 8, to_date('28.08.2010','dd.mm.yyyy'), 17990, 207, 4 FROM DUAL UNION ALL
  9                    SELECT 9, to_date('28.08.2010','dd.mm.yyyy'), 900, 208, 2 FROM DUAL )
 10      ,pr_pachki AS (SELECT 1 kod, 'aaa' naimenovanie FROM DUAL UNION ALL
 11                     SELECT 2, 'bbb' FROM DUAL UNION ALL
 12                     SELECT 3, 'ccc' FROM DUAL UNION ALL
 13                     SELECT 4, 'ddd' FROM DUAL)
 14  SELECT lskv_kod, data_platezha, summa, naimenovanie
 15    FROM (SELECT p.lskv_kod, p.data_platezha, p.summa, SUM(summa) OVER (PARTITION BY p.lskv_kod, p.data_platezha) sum
m, pp.naimenovanie
 16            FROM platezhi p, pr_pachki pp
 17           WHERE p.pp_kod=pp.kod)
 18   WHERE summ>15000;

  LSKV_KOD DATA_PLAT      SUMMA NAI
---------- --------- ---------- ---
       205 26-AUG-10      10000 aaa
       205 26-AUG-10      12000 bbb
       206 27-AUG-10      14500 aaa
       206 27-AUG-10       1000 ccc
       207 28-AUG-10      17990 ddd
26 авг 10, 16:33    [9331823]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
env,

Ну поля я латиницей назвал, а данные Ваши конечно. Вот

Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
Connected as balls


SQL> 
SQL> SELECT 1 kod, to_date('26.08.2010','dd.mm.yyyy') data_platezha, 10000 summa, 205 lskv_kod, 1 pp_kod FROM DUAL UNION ALL
  2                    SELECT 2, to_date('26.08.2010','dd.mm.yyyy'), 12000, 205, 2 FROM DUAL UNION ALL
  3                    SELECT 3, to_date('26.08.2010','dd.mm.yyyy'), 1900, 206, 1 FROM DUAL UNION ALL
  4                    SELECT 4, to_date('26.08.2010','dd.mm.yyyy'), 100, 206, 2 FROM DUAL UNION ALL
  5                    SELECT 5, to_date('27.08.2010','dd.mm.yyyy'), 14000, 205, 1 FROM DUAL UNION ALL
  6                    SELECT 6, to_date('27.08.2010','dd.mm.yyyy'), 14500, 206, 1 FROM DUAL UNION ALL
  7                    SELECT 7, to_date('27.08.2010','dd.mm.yyyy'), 1000, 206, 3 FROM DUAL UNION ALL
  8                    SELECT 8, to_date('28.08.2010','dd.mm.yyyy'), 17990, 207, 4 FROM DUAL UNION ALL
  9                    SELECT 9, to_date('28.08.2010','dd.mm.yyyy'), 900, 208, 2 FROM DUAL
 10  /

       KOD DATA_PLATEZHA      SUMMA   LSKV_KOD     PP_KOD
---------- ------------- ---------- ---------- ----------
         1 26.08.2010         10000        205          1
         2 26.08.2010         12000        205          2
         3 26.08.2010          1900        206          1
         4 26.08.2010           100        206          2
         5 27.08.2010         14000        205          1
         6 27.08.2010         14500        206          1
         7 27.08.2010          1000        206          3
         8 28.08.2010         17990        207          4
         9 28.08.2010           900        208          2

9 rows selected

SQL> 
SQL> SELECT 1 kod, 'aaa' naimenovanie FROM DUAL UNION ALL
  2                     SELECT 2, 'bbb' FROM DUAL UNION ALL
  3                     SELECT 3, 'ccc' FROM DUAL UNION ALL
  4                     SELECT 4, 'ddd' FROM DUAL
  5  /

       KOD NAIMENOVANIE
---------- ------------
         1 aaa
         2 bbb
         3 ccc
         4 ddd

SQL> 
26 авг 10, 16:36    [9331862]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
env,

по моим данным, не по поримеру
26 авг 10, 16:37    [9331871]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
env,

Бррр. Совсем меня запутали. Я думал это ТС меня спрашивает :)
26 авг 10, 16:37    [9331877]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
zhal
Member

Откуда: Киев-Харьков
Сообщений: 647
swipe,

Дык поменяйте в запросе наименования полей на Ваши!
26 авг 10, 16:38    [9331890]     Ответить | Цитировать Сообщить модератору
 Re: having sum  [new]
swipe
Member

Откуда:
Сообщений: 97
ЕЩЕ раз перефразирую условие:

в течение одних суток по одному лскв_коду сумма платежей >15000


мне нужно отобрать эти лскв коды!!! хотя бы просто столбец лскв_кодов
26 авг 10, 16:40    [9331912]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить