相关疑难解决方法(0)

选择每个GROUP BY组中的第一行?

正如标题所示,我想选择用a组成的每组行的第一行GROUP BY.

具体来说,如果我有一个purchases看起来像这样的表:

SELECT * FROM purchases;
Run Code Online (Sandbox Code Playgroud)

我的输出:

id | customer | total
---+----------+------
 1 | Joe      | 5
 2 | Sally    | 3
 3 | Joe      | 2
 4 | Sally    | 1

我想查询每个产品id的最大购买量(total)customer.像这样的东西:

SELECT FIRST(id), customer, FIRST(total)
FROM  purchases
GROUP BY customer
ORDER BY total DESC;
Run Code Online (Sandbox Code Playgroud)

预期产出:

FIRST(id) | customer | FIRST(total)
----------+----------+-------------
        1 | Joe      | 5
        2 | Sally    | 3

sql sqlite postgresql group-by greatest-n-per-group

1205
推荐指数
16
解决办法
95万
查看次数

PostgreSQL - 获取具有列的Max值的行

我正在处理Postgres表(称为"生命"),其中包含time_stamp,usr_id,transaction_id和lives_remaining列的记录.我需要一个查询,它将为每个usr_id提供最新的lives_remaining总数

  1. 有多个用户(不同的usr_id)
  2. time_stamp不是唯一标识符:有时用户事件(表中逐行)将以相同的time_stamp发生.
  3. trans_id仅在非常小的时间范围内是唯一的:随着时间的推移它会重复
  4. remaining_lives(对于给定用户)可以随时间增加或减少

例:

time_stamp|lives_remaining|usr_id|trans_id
-----------------------------------------
  07:00  |       1       |   1  |   1    
  09:00  |       4       |   2  |   2    
  10:00  |       2       |   3  |   3    
  10:00  |       1       |   2  |   4    
  11:00  |       4       |   1  |   5    
  11:00  |       3       |   1  |   6    
  13:00  |       3       |   3  |   1    

因为我需要使用每个给定的usr_id的最新数据来访问该行的其他列,所以我需要一个给出如下结果的查询:

time_stamp|lives_remaining|usr_id|trans_id
-----------------------------------------
  11:00  |       3       |   1  |   6    
  10:00  |       1       |   2  |   4    
  13:00  |       3       |   3  | …

sql postgresql query-optimization cbo cost-based-optimizer

87
推荐指数
6
解决办法
9万
查看次数

Postgres DISTINCT与DISTINCT ON

我有一个使用以下语句创建的Postgres表.此表由另一个服务的数据转储填充.

CREATE TABLE data_table (
    date date DEFAULT NULL,
    dimension1 varchar(64) DEFAULT NULL,
    dimension2 varchar(128) DEFAULT NULL
) TABLESPACE pg_default;
Run Code Online (Sandbox Code Playgroud)

我正在构建的ETL中的一个步骤是提取它们的唯一值dimension1并将它们插入另一个中间表中.但是,在某些测试中,我发现下面的2个命令不会返回相同的结果.我希望两者都返回相同的金额.与第二个命令相比,第一个命令返回的结果更多(1466行与1504行相比).

-- command 1
SELECT DISTINCT count(dimension1)
FROM data_table;

-- command 2    
SELECT count(*)
FROM (SELECT DISTINCT ON (dimension1) dimension1
FROM data_table
GROUP BY dimension1) AS tmp_table;
Run Code Online (Sandbox Code Playgroud)

有什么明显的解释吗?作为解释的替代方案,是否有任何建议检查我应该做的数据?

编辑:以下查询都返回1504(与"简单"相同DISTINCT)

SELECT count(*)
FROM data_table WHERE dimension1 IS NOT NULL;

SELECT count(dimension1)
FROM data_table;
Run Code Online (Sandbox Code Playgroud)

谢谢!

sql postgresql

14
推荐指数
1
解决办法
6021
查看次数

每组具有最大值的行 - SQLite

给定一个表,columns(name, lat, lon, population, type)其中每个name有很多行,我想选择按名称分组的行,其中人口最多。如果我将自己限制在姓名和人口范围内,则以下内容有效

SELECT name, Max(population) 
FROM table WHERE name IN ('a', 'b', 'c') 
GROUP BY name;
Run Code Online (Sandbox Code Playgroud)

但我想要其他列 - lat, lon, type- 以及结果。如何使用 SQLite 实现这一目标?

sqlite

2
推荐指数
2
解决办法
537
查看次数