【问题标题】:how to reference a result in a subquery如何在子查询中引用结果
【发布时间】:2016-12-06 18:31:32
【问题描述】:

我在一个 sqlite 数据库中有下表

+----+-------------+-------+
| ID | Week Number | Count |
+----+-------------+-------+
|  1 |           1 |    31 |
|  2 |           2 |    16 |
|  3 |           3 |    73 |
|  4 |           4 |    59 |
|  5 |           5 |    44 |
|  6 |           6 |    73 |
+----+-------------+-------+

我想拿出下表。我将本周的销售额作为一列,然后下一列将是上周的销售额。

+-------------+-----------+-----------+
| Week Number | This_Week | Last_Week |
+-------------+-----------+-----------+
|           1 |        31 | null      |
|           2 |        16 | 31        |
|           3 |        73 | 16        |
|           4 |        59 | 73        |
|           5 |        44 | 59        |
|           6 |        73 | 44        |
+-------------+-----------+-----------+

这是我要使用的选择语句:

select 
    id, week_number, count, 
    (select count from tempTable 
     where week_number = (week_number-1)) 
from 
    tempTable;

【问题讨论】:

    标签: sqlite subquery


    【解决方案1】:

    您正在比较两个不同行中的值。当你只是写week_number时,数据库不知道你指的是哪一个。

    要引用特定表中的列,您必须在其前面加上表名:tempTable.week_number

    如果两个表同名,则必须至少重命名其中一个:

    SELECT id,
           week_number,
           count AS This_Week,
           (SELECT count
            FROM tempTable AS T2
            WHERE T2.week_number = tempTable.week_number - 1
           ) AS Last_Week
    FROM tempTable;
    

    【讨论】:

      【解决方案2】:

      如果您想对同一张表进行两次查询,则必须在原始表和复制表上添加别名以区分它们

      select a.week_number,a.count this_week,
            (select b.count from tempTable b 
              where b.week_number=(a.week_number-1)) last_week
        from tempTable a;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        • 2012-06-03
        • 1970-01-01
        • 2011-03-02
        • 2015-05-15
        • 2013-11-01
        • 1970-01-01
        相关资源
        最近更新 更多