как получить два значения из функции агрегации MAX () в PostgresSQL - PullRequest
1 голос
/ 31 марта 2019

Теперь у меня есть запрос, по которому я буду использовать функцию агрегации MAX (). я сделал это

WITH t2 AS( SELECT customerid , sum(total) sumTotal FROM invoice GROUP BY 1 ORDER BY 1 ) SELECT c.customerid customerid , c.firstName firstName , c.lastName lastName , c.country customerCountry , MAX(sumTotal) MaxSumTotal FROM customer c JOIN t2 ON c.customerid = t2.customerid GROUP BY 4 ORDER BY 4

но этот возвращает только одно значение для MAX (). у меня один из них имеют два равных выхода MAX (). я хочу показать их обоих

как я могу это сделать ???

это диаграмма ERD для базы данных Database ERD

Ответы [ 3 ]

2 голосов
/ 31 марта 2019

Использование rank():

WITH t2 AS (
      SELECT customerid , sum(total) as sumTotal,
             RANK() OVER (ORDER BY sum(total) DESC) as seqnum
      FROM invoice
      GROUP BY 1
     )
SELECT c.customerid, c.firstName firstName, c.lastName lastName,
       c.country as customerCountry, sumTotal as MaxSumTotal
FROM customer c JOIN
     t2
     ON c.customerid = t2.customerid
WHERE seqnum = 1
ORDER BY c.customerid;
1 голос
/ 31 марта 2019

Вы можете искать rank(), чтобы ранжировать клиентов по их совокупному доходу (или какому-либо другому) и ограничить результат тем, что имеет ранг 1, то есть максимальный итог.

SELECT y.customerid,
       y.firstname,
       y.lastname,
       y.country,
       y.total
       FROM (SELECT c.customerid,
                    c.firstname,
                    c.lastname,
                    c.country,
                    x.total,
                    rank() OVER (ORDER BY x.total DESC) r
                    FROM customer c
                         INNER JOIN (SELECT i.customerid,
                                            sum(i.total) total
                                            FROM invoice i
                                            GROUP BY i.customerid) x
                                    ON x.customerid = c.customerid) y
       WHERE y.r = 1;
0 голосов
/ 31 марта 2019

Я решаю это с помощью кода ниже:

WITH t1 as ( SELECT (customer.customerid) customerid , firstName , lastName , country , SUM(invoice.total) totalSpent FROM customer JOIN invoice ON customer.customerid = invoice.customerid GROUP BY customer.customerid ) SELECT t1.* FROM t1 JOIN( SELECT customerid , firstName , lastName , country , MAX(totalSpent) as MaxTotalSpent FROM t1 GROUP BY country )t2 ON t2.country = t1.country WHERE t1.totalSpent = t2.MaxTotalSpent ORDER BY country

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