我觉得必须有一种方法可以直接在SQL中完成for循环。有人可以给些指导吗?
for x in range(1, numckts + 1, 6):
alist.append(x)
alist.append(x + 1)
for val in alist:
sql = (
"SELECT VA FROM circuits WHERE pnl_id = "
+ pnlid
+ " AND Num = "
+ str(val)
+ ";"
)
rows = cur.execute(sql)
for row in rows:
valA = valA + row[0]
答案 0 :(得分:0)
请考虑在SQLite中使用ROW_NUMBER()
window function来对每个pnl_id
中的行进行顺序计数。然后,使用模运算符对每6行(即第7行和第8行)之后的连接进行过滤,以过滤最终聚合。
请注意:Python 3.8.x可能附带的窗口函数需要SQLite版本至少为3.25。检查sqlite3.sqlite_version
。
WITH sub_row AS
(SELECT ROW_NUMBER() OVER(PARTITION BY c.pnl_id ORDER BY rowid) AS rn
, c.pnl_id
, c.[VA]
, p. numckts
FROM circuits c
INNER JOIN panelboards p
ON c.pnl_id = p.id)
,
sub_conn AS
(SELECT rn
, CASE WHEN rn % 6 IN (1, 2) THEN 1 ELSE 0 END) AS conn
, pnl_id
, [VA]
, numckts
FROM sub_row
WHERE rn < numckts + 1)
SELECT pnl_id, SUM(VA) AS sum_VA
FROM sub_conn
WHERE conn = 1
GROUP BY pnl_id
答案 1 :(得分:0)
select p.pnlid
, c.Num
, c.VA
from circuits c
inner join panel p on p.pnlid = c.pnl_id
where (c.Num % 6) in (1, 2)