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

Sql 如何仅显示内部联接表列的最大值?,sql,database,postgresql,pgadmin-4,Sql,Database,Postgresql,Pgadmin 4,我在两个表上使用了内部联接: Transactions - transaction_id (PK) -ticket_id (FK) reference to ticketsforsale Ticketsforsale : - ticket_id (PK) - type - price 每个表中有更多的列,但对这个问题没有任何作用 我尝试的查询如下所示: SELECT ticketsforsale.type , SUM(ticketsforsale.price) AS Tota

我在两个表上使用了内部联接:

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最大值的行。我只是在这个查询中缺少正确的最大函数用法,谢谢

您可以使用CTE并基于TotalProfit值仅拾取一行

如果要使用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)
您可以使用CTE并基于TotalProfit值仅拾取一行

如果要使用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)
使用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;
注意,我还引入了表别名,因此查询更易于编写和读取

根据此查询,您似乎不需要加入:

使用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;
注意,我还引入了表别名,因此查询更易于编写和读取

根据此查询,您似乎不需要加入:


非常感谢,这很有魅力。如果你不介意的话,你能给我一个使用MAX函数的解决方案吗?纯粹出于好奇我在帖子中添加了一个关于max的解决方案。非常感谢,这很有魅力。如果你不介意的话,你能给我一个使用MAX函数的解决方案吗?纯粹出于好奇我在帖子中添加了一个使用max的解决方案。谢谢,伙计,我想我对max函数太执着了,以至于我无法找到最简单的解决方案:P。关于内部联接的问题是,如果我不联接这两个表,我就不知道在哪里卖出了什么票,因为卖出的票列在事务表中。不管怎样,再次感谢你的时间和帮助:谢谢你,我想我对MAX函数太执着了,以至于我无法找到最简单的解决方案:P。关于内部联接的问题是,如果我不联接这两个表,我就不知道在哪里卖出了什么票,因为卖出的票列在事务表中。无论如何,再次感谢您的时间和帮助: