【问题标题】:How to do Nested Queries in SQL如何在 SQL 中进行嵌套查询
【发布时间】:2019-02-28 08:54:13
【问题描述】:

我正在尝试学习 SQL,虽然我正在慢慢学习如何查询数据,但我一直坚持查询查询的结果。举个例子

我想要一条 SQL 语句来做两件事。假设我有 2 个如下表(表 1 是从另一个堆栈溢出示例中借用的)

表 1:

ID  game   point  time
1    x      5     7:00
1    z      4     11:00
2    y      6     9:00
3    x      2     2:00
3    y      5     4:00
3    z      8     6:00
4    k      0     8:00    

表 2:

id  tv chan
1    cab  
2    trop  
3    start   
4    cab  

我要做的第一件事是合并这些表中的某些列。我知道我可以选择这些列并对 ID 进行内部连接

但是,我要做的第二件事是删除所有点值为 0 的行,然后只保留具有不同游戏名称且点值最低的行。所以我希望决赛桌看起来像这样

id  game   point   tv chan    
1    z      4       cab
2    y      5       trop
3    x      2       start

谢谢

【问题讨论】:

  • 游戏 y 的最低分数是 5(不是 6)

标签: mysql sql database dataset querying


【解决方案1】:

你可以试试这样的:

SELECT t1.ID, 
       t1.game, 
       t1.point, 
       t2.tv_chan 
FROM Table1 AS t1
INNER JOIN Table2 AS t2 ON t2.id = t1.id 
INNER JOIN (SELECT t11.game, MIN(t11.point) AS min_point  
            FROM Table1 AS t11 
            WHERE t11.point != 0 
            GROUP BY t11.game
           ) AS t3 ON t3.game = t1.game
                      AND t3.min_point = t1.point 
WHERE t1.point != 0 

【讨论】:

    【解决方案2】:

    您可以使用带有子查询的连接,该子查询按 id 和游戏分组以获得最小点

        select t1.id, t1.game. t1.point, t2 `tv chan`
        from (
            select id, game,  min(point) point
            from table1
            where point > 0
            group by id, game
        ) t1 
        inner join table2 t2 on t1.id = t2.id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      相关资源
      最近更新 更多