相关疑难解决方法(0)

选择具有最小值的所有行

在 Sqlite 3 中,我试图弄清楚如何根据最小值选择行。我认为我对相关术语的了解不足,无法有效地搜索谷歌。

该表看起来像:

num         text        num2      
----------  ----------  ----------
0           a           1         
0           a           2         
1           a           3         
1           b           4         
Run Code Online (Sandbox Code Playgroud)

我想获取num2is1, 2和的行4。我想根据文本列的每个唯一值的 num 的最小值进行选择。

所以,对于text = 'a',最小值num0,所以我想要第 1 行和第 2 行。对于text = 'b',最小值num1,所以我想要行4

使用 group by 的各种组合,我可以得到行12或行14。我觉得我缺少一个可以做我想做的事情的 SQL 组件,但我一直无法弄清楚它可能是什么。

执行此类查询的正确方法是什么?

可能的解决方案

我找到了一种方法来做到这一点。我的声誉不足以回答我自己的问题,所以我在这里进行更新。我不确定它是否总是正确的或效率如何。欢迎提出任何意见。

我使用了一个复合选择语句,其中一个查询为文本的每个唯一值找到 num 的最小值:

sqlite> select …
Run Code Online (Sandbox Code Playgroud)

sqlite

11
推荐指数
1
解决办法
10万
查看次数

为每位作者选择一篇最新的帖子

我确定这是一个简单的问题,我想它被问了很多次,但我无法从其他答案中弄清楚,抱歉。

我使用最新版本的 PostgreSQL 和 MySQL。我有2张桌子:

CREATE TABLE authors (
    id INT,
    name VARCHAR
)

CREATE TABLE posts (
    id INT,
    author_id INT,
    text VARCHAR,
    date DATE
)
Run Code Online (Sandbox Code Playgroud)

我需要为每个作者选择一个最新的帖子。谢谢!

更新

谢谢,这两个链接都提供了我的问题的答案,但有一些例外。以下所有查询都给出了相同的结果(顺便说一句,哪个最有效?)然后返回的结果集包含所有此类帖子。我应该如何修改这些查询返回正好每位作者一个帖子?

SELECT p1.*
FROM posts p1
LEFT JOIN posts p2 ON p1.author_id = p2.author_id AND p1.date < p2.date
WHERE p2.author_id IS NULL
ORDER BY p1.author_id;

SELECT p1.* 
FROM posts p1
INNER JOIN (
  SELECT author_id, MAX(date) AS max_date
  FROM posts
  GROUP BY author_id) p2
  ON p1.author_id = p2.author_id AND …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql greatest-n-per-group

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

标签 统计

greatest-n-per-group ×1

mysql ×1

postgresql ×1

sqlite ×1