[英]SQL: FOR Loop in SELECT query
有沒有辦法通過 SELECT 查詢中的FOR LOOP
SELECT
? (1)
我問是因為我不知道如何在單個SELECT
中提交 - 為表t_1
的每一行查詢表t_2
中的一些數據集合(請參見UPDATE示例)。 是的,我們確實可以按UNIQUE INDEX
進行GROUP BY
,但如果它不存在怎么辦? 或者如何請求來自t_1
的所有行,每行都與來自t_2
的特定相關行連接。 因此,在完美世界中,我們似乎必須能夠通過適當的 SQL 命令(R)遍歷表。 也許, ANY(...)
會有幫助嗎?
在這里,我試圖在表t
中列的所有值中找到 column prop
中的最大重復次數。 即我試圖在 SQL 查詢(Q1)中執行類似 Pandas 的t.groupby(prop).max()
的操作:
SELECT Max(C) FROM (SELECT Count(t_1.prop) AS C
FROM t AS t_1
WHERE t_1.prop = ANY (SELECT prop
FROM t AS t_2));
但它只會拋出錯誤:
每個派生表都必須有自己的別名。
我不明白這個錯誤。 為什么會這樣? (2)
是的,我們可以通過使用SELECT prop, COUNT() GROUP BY prop
更輕松地實現 Pandas 的value_counts(...)
方式。 但是我想以“循環”的方式來做這件事,原因是(R)保持在“單個非分組SELECT
- 查詢模式”。
這個子查詢試圖模仿 Pandas 的t.value_counts(...)
) (Q2) :
SELECT Count(t_1.prop) AS C FROM t AS t_1 WHERE t_1.prop = ANY(SELECT prop FROM t AS t_2)
結果為6 ,這只是t中的行數。 結果合乎邏輯。 ANY
- 子句簡單地為每一行返回TRUE
,一旦收集了所有行, COUNT(...)
就簡單地返回收集的(即所有)行數。
順便說一句,在我看來,在“完整”之前的SELECT
(Q1)中應該返回非常6 。
所以,主要問題是如何在這樣的查詢中循環? 有這樣的機會嗎?
更新
問題(2)的答案在這里找到,感謝Luuk 。 我剛剛為SELECT Max(C) FROM (...) AS sq
中的 (...) 子查詢分配了一個別名,結果成功了。 當然,我得到了6 。 所以,問題(1)仍然不清楚。
我也嘗試過以這種方式進行迭代(Q3) :
SELECT (SELECT prop_2 FROM t_2 WHERE t_2.prop_1 = t_1.prop) AS isq FROM t_1;
在t_2
中, prop_2
與prop_1
(又名t_1
中的prop
)連接成一對一。 因此,在整個過程中,我們的isq
(內部 select 查詢)為t_1
中的每個prop
值返回幾個(行) prop_2
值。 這就是(Q3)拋出錯誤的原因:
子查詢返回多於 1 行。 再次,合乎邏輯。 因此,我無法在單個非分組
SELECT
查詢中創建循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.