【问题标题】:SQL Query, Getting Rid of Repeat SelectsSQL 查询,摆脱重复选择
【发布时间】:2020-11-26 13:43:41
【问题描述】:

我在 python 中使用 sqlite3,我有一个包含以下列的表:

recordid(int)、username(text)、locations(text)、types(text)、occupancy(int)、time_added(datetime)、token(text) 和 (undo)。

我有以下查询,我根据占用情况从表中选择数据,添加的时间在用户输入的两个指定时间之间,即 start_date 和 end_date:

('''SELECT locations, types, 
           (SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 1 AND types = ? AND time_added BETWEEN ? AND ?),
           (SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 2 AND types = ? AND time_added BETWEEN ? AND ?),
           (SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 3 AND types = ? AND time_added BETWEEN ? AND ?),
           (SELECT COUNT (occupancy) FROM traffic WHERE undo = 0 AND occupancy = 4 AND types = ? AND time_added BETWEEN ? AND ?),
    FROM traffic WHERE types = ? GROUP BY type''', 
(vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle, start_date, end_date, vehicle)

有没有办法压缩这个,所以我不必为了改变占用而多次复制和粘贴相同的东西?我尝试使用 for 循环,但这并没有真正让我有所收获。

干杯!

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    我很确定可以大大简化查询:

    SELECT type
           SUM( occupancy = 1 ) as cnt_1,
           SUM( occupancy = 2 ) as cnt_2,
           SUM( occupancy = 3 ) as cnt_3,
           SUM( occupancy = 4 ) as cnt_4
    FROM traffic
    WHERE undo = 0 AND
          type = ? AND
          time_added BETWEEN ? AND ?
    GROUP BY type;
    

    不过,我不确定这是否正是您的问题所在。

    【讨论】:

    • 我想这是我想到的方法。我认为这主要只是我需要简化的查询。只是想提供有关查询试图做什么的上下文。我只是想要一种让查询更整洁的方法。
    猜你喜欢
    • 1970-01-01
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多