如何仅显示内部联接表列的最大值?

时间:2019-06-01 18:31:11

标签: sql database postgresql pgadmin-4

我在两个表上使用了INNER JOIN:

Transactions 
 - transaction_id (PK)
 -ticket_id (FK) reference to ticketsforsale

Ticketsforsale : 
 - ticket_id (PK)
 - type
 - price 

(每个表中有更多列,但对这个问题没有用)

我尝试过的查询如下:

SELECT ticketsforsale.type , SUM(ticketsforsale.price) AS TotalProfit
   FROM ticketsforsale INNER JOIN transactions 
   ON ticketsforsale.ticket_id = transactions.ticket_id 
GROUP BY ticketsforsale.type 

The result is : 
  Sports | 300
  Cruise | 600
  Theater| 100

我尝试在查询中使用此行

WHERE TotalProfit = SELECT(MAX(TotalProfit)

但是我找不到这行的正确位置。

我要查询执行的操作是仅显示包含“ TotalProfit”最大值的ROW。我只是在此查询上缺少正确的MAX函数用法,谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用CTE并根据TotalProfit值仅选择一行。

with cte as (
SELECT ticketsforsale.type , SUM(ticketsforsale.price) AS TotalProfit
   FROM ticketsforsale INNER JOIN transactions 
   ON ticketsforsale.ticket_id = transactions.ticket_id 
GROUP BY ticketsforsale.type 
)
select *
from cte 
order by TotalProfit desc
limit 1

如果您想使用max(),则可以执行以下操作:

with cte as (
SELECT ticketsforsale.type , SUM(ticketsforsale.price) AS TotalProfit
   FROM ticketsforsale INNER JOIN transactions 
   ON ticketsforsale.ticket_id = transactions.ticket_id 
GROUP BY ticketsforsale.type 
)
select *
from cte 
where TotalProfit = (select max(TotalProfit) from cte)

答案 1 :(得分:2)

使用<div onclick=start()>start</div> <div onclick=stop()>stop</div> 并将结果集限制为一行:

let refreshInterval = null;

start() {
  var i = 0;
    refreshInterval = setInterval(function() {
      console.log(i);
      i++;
    }, 1000);
}


stop() {
    ???????
}

请注意,我还引入了表别名,因此查询更易于编写和阅读。

根据此查询,您似乎不需要ORDER BY

SELECT tfs.type , SUM(tfs.price) AS TotalProfit
FROM ticketsforsale tfs INNER JOIN
     transactions t 
     ON tfs.ticket_id = t.ticket_id 
GROUP BY tfs.type 
ORDER BY TotalProfit DESC
FETCH FIRST 1 ROW ONLY;