簡體   English   中英

SQL:SELECT查詢中的FOR循環

[英]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_2prop_1 (又名t_1中的prop )連接成一對一。 因此,在整個過程中,我們的isq (內部 select 查詢)t_1中的每個prop值返回幾個(行) prop_2值。 這就是(Q3)拋出錯誤的原因:

子查詢返回多於 1 行。 再次,合乎邏輯。 因此,我無法在單個非分組SELECT查詢中創建循環。

此查詢將返回b的最高計數值:

SELECT b, count(*)
FROM table1
GROUP BY b
ORDER BY count(*) DESC
LIMIT 1;

參見: DBFIDDLE

編輯:沒有GROUP BY

SELECT b,C1
FROM (
   SELECT
      b,
      ROW_NUMBER() OVER (PARTITION BY B ORDER BY A) C1,
      ROW_NUMBER() OVER (PARTITION BY B ORDER BY A DESC) C2
  FROM table1
  ) x
WHERE x.C2=1

參見: DBFIDDLE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM