[请帮助我获得预期的输出,我已经尝试过GROUP BY,但无法获得所需的内容

问题描述 投票:-1回答:2

我有这张桌子

\d sales_girls

  Column   |         Type         | Collation | Nullable | Default
-----------+----------------------+-----------+----------+---------
 id        | character varying(4) |           |          |
 f_name    | character varying(8) |           |          |
 sale      | integer              |           |          |
 sale_date | date                 |           |          |

SELECT * FROM p8.sales_girls;

  id  | f_name | sale | sale_date
------+--------+------+------------
 E001 | Linda  | 1000 | 2016-01-30
 E002 | Sally  |  750 | 2016-01-30
 E003 | Zindy  |  500 | 2016-01-30
 E001 | Linda  |  150 | 2016-02-01
 E001 | Linda  | 5000 | 2016-02-01
 E002 | Sally  |  250 | 2016-02-01
 E001 | Linda  |  250 | 2016-02-02
 E002 | Sally  |  150 | 2016-02-02
 E003 | Zindy  |   50 | 2016-02-02
(9 rows)

预期输出

我要选择每个女孩中最多的行

  id  | f_name | sale | sale_date
------+--------+------+------------
 E002 | Sally  |  750 | 2016-01-30
 E003 | Zindy  |  500 | 2016-01-30
 E001 | Linda  | 5000 | 2016-02-01
(9 rows)

我已经尝试过

SELECT id, f_name, MAX(sale), sale_date
FROM p8.sales_girls
GROUP BY f_name; 
postgresql greatest-n-per-group
2个回答
0
投票

您可以执行此操作:

select id,f_name,sale,sale_date from (        
    select id,f_name,sale,sale_date,max(sale) OVER (PARTITION BY id) max_sale  from  sales_girls 
) a where sale=max_sale

但是,如果Lynda有两条销售量为5000的生产线,会发生什么?

如果您希望在此cas中指定最大日期:

select id,f_name,sale,max(sale_date) sale_date from (         
select id,f_name,sale,sale_date,max(sale) OVER (PARTITION BY id) max_sale  from sales_girls 
    ) a where sale=max_sale
group by 1,2,3

0
投票

使用PostgreSQL的DISTINCT ON子句:

SELECT DISTINCT ON (id)
       id, f_name, sale, sale_date
FROM p8.sales_girls
ORDER BY id, sale DESC;

您的表格似乎未正确归一化,因为id似乎标识为“女售货员”。

© www.soinside.com 2019 - 2024. All rights reserved.