SQL-запрос показывает только максимальное значение - как это сделать? - PullRequest
0 голосов
/ 15 декабря 2018

Извините за мой плохой английский.

SELECT   
    siparisler.siparis_tarihi, MAX(ADET), urunler.urun_ismi
FROM 
    SIPARISLER,
    URUNLER,
    MUSTERILER,
    SIPARIS_DETAY
WHERE     
    SIPARISLER.SIPARISID = SIPARIS_DETAY.SIPARISID
    AND URUNLER.URUN_ID = SIPARIS_DETAY.URUN_ID
    AND MUSTERILER.MUSTERI_ID = SIPARISLER.MUSTERI_ID  
GROUP BY  
    urunler.urun_ismi ,siparis_tarihi 
ORDER BY 
    siparis_tarihi;

Это мой SQL-код оракула и вот результат

enter image description here

Как я могу показать только макс.значение как это:

enter image description here

Каждую дату я могу показать максимальную строку спасибо

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

В Oracle вы можете использовать функциональность keep для агрегирования.Это именно то, что вы хотите:

SELECT s.siparis_tarihi, MAX(ADET),
       MAX(u.urun_ismi) KEEP (DENSE_RANK FIRST ORDER BY ADET DESC)
FROM SIPARISLER s JOIN
     URUNLER u
     ON s.SIPARISID = u.SIPARISID JOIN
     SIPARIS_DETAY sd
     ON u.URUN_ID = sd.URUN_ID JOIN
     MUSTERILER m
     ON m.MUSTERI_ID = s.MUSTERI_ID
GROUP BY s.siparis_tarihi 
ORDER BY s.siparis_tarihi;

Примечания:

  • При этом используется правильный, явный, стандартный JOIN синтаксис. Никогда не используйте запятые в предложении FROM.
  • Здесь используются простые псевдонимы таблиц.Это облегчает написание и чтение таблицы.
0 голосов
/ 15 декабря 2018

Попробуйте упорядочить результат по max(adet) по убыванию, а затем выберите верхнюю строку из результата, используя rownum = 1.

SELECT *
       FROM (SELECT siparisler.siparis_tarihi,
                    max(adet),
                    urunler.urun_ismi
                    FROM siparis_detay
                         INNER JOIN siparisler
                                    ON siparisler.siparisid = siparis_detay.siparisid
                         INNER JOIN urunler
                                    ON urunler.urun_id = siparis_detay.urun_id
                         INNER JOIN musteriler
                                    ON musteriler.musteri_id = siparisler.musteri_id
                    GROUP BY urunler.urun_ismi,
                             siparisler.siparis_tarihi
                    ORDER BY max(adet) DESC) x
       WHERE rownum = 1;

Вы также должны использовать явный синтаксис объединения для лучшей читаемости.


Редактировать:

Выше приведен ответ на оригинальный вопрос.Ниже приводится комментарий к комментарию.

Попробуйте использовать row_number(), чтобы назначить номера строк каждой строке, разбитой по дате, в порядке убывания максимального значения adet, а затем выберите только те, где номер строки равен1.

SELECT y.siparis_tarihi,
       y.adet,
       y.urun_ismi
       FROM (SELECT x.siparis_tarihi,
                    x.adet,
                    x.urun_ismi,
                    row_number() OVER (PARTITION BY x.siparis_tarihi
                                       ORDER BY x.adet DESC) r
                    FROM (SELECT siparisler.siparis_tarihi,
                                 max(adet) adet,
                                 urunler.urun_ismi
                                 FROM siparis_detay
                                      INNER JOIN siparisler
                                                 ON siparisler.siparisid = siparis_detay.siparisid
                                      INNER JOIN urunler
                                                 ON urunler.urun_id = siparis_detay.urun_id
                                      INNER JOIN musteriler
                                                 ON musteriler.musteri_id = siparisler.musteri_id
                                 GROUP BY urunler.urun_ismi,
                                          siparisler.siparis_tarihi) x) y
       WHERE y.r = 1;

Показывает только одну запись для каждой даты.Если вы хотите показать все строки с максимальным значением для даты на ничьей, замените row_number() на rank().

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