【问题标题】:Sqlite SQL query to include empty groups包含空组的 Sqlite SQL 查询
【发布时间】:2015-07-23 08:41:48
【问题描述】:

这可能是微不足道的,但我的 SQL 素养有限。

假设,您在数据库中有两个表。以下是用于构造和填充数据的查询:

CREATE TABLE `participiants` (
    `name`  TEXT,
    `age`   INTEGER
);

CREATE TABLE `outcomes` (
    `participiant`  TEXT,
    `score` INTEGER
);

INSERT INTO participiants
VALUES('Alice', 15),
    ('Bob', 37),
    ('Cindy', 56);

INSERT INTO outcomes
VALUES('Alice', 200),
    ('Alice', 250),
    ('Cindy', 180);

有数据的表格是这样的

参与者

name    age
------------
Alice   15
Bob     37
Cindy   56

结果

participiant   score
---------------------
Alice          200
Alice          250
Cindy          180

对于每个参与者.name,我想查询他们的 MAX(outcomes.score),包括结果表中不存在的 Bob 的空组,因此结果集应如下所示:

participiants.name   MAX(outcomes.score)
-----------------------------------
Alice                 250
Bob                   NONE
Cindy                 180

我试过了

SELECT participiants.name, MAX(outcomes.score)
FROM participiants, outcomes
WHERE participiants.name = outcomes.participiant
GROUP BY participiants.name

但是,当然,这不包括 Bob NONE。我应该研究什么 SQL/Sqlite 语法来找到解决方案?

【问题讨论】:

    标签: sql sqlite group-by


    【解决方案1】:
    SELECT participiants.name, MAX(outcomes.score)
    FROM participiants
    LEFT JOIN outcomes
    ON participiants.name = outcomes.participiant
    GROUP BY participiants.name
    

    LEFT JOIN 将选择表“PARTICIPANTS”中的所有元素

    【讨论】:

    • 我在一分钟前提出了完全相同的解决方案,当时我在 sqlite 教程页面上查看了 LEFT JOIN。 :)
    【解决方案2】:

    使用左外连接:

     SELECT participiants.name, MAX(outcomes.score)
     FROM participiants LEFT OUTER JOIN outcomes on participiants.name = outcomes.participiant
     GROUP BY participiants.name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      相关资源
      最近更新 更多