SQL:SELECT 查询中的 FOR 循环

丹尼尔

有没有办法通过FOR LOOP-SELECT查询?(1)

我之所以问,是因为我不知道如何为表的每一行提交SELECT来自表的一些数据的单个查询集合(请参阅UPDATE示例)。是的,我们确实可以但如果它不存在怎么办?或者如何请求来自 的所有行,每个都与来自 的特定相关行连接因此,似乎在完美世界中,我们必须能够通过适当的 SQL 命令(R)遍历表。也许,会有帮助吗?t_2t_1GROUP BYUNIQUE INDEXt_1t_2ANY(...)

在这里,我试图prop在 table 中列的所有值中找到最大重复次数tt.groupby(prop).max()即我尝试在 SQL 查询(Q1)中执行类似于 Pandas 的操作

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)

是的,我们可以value_counts(...)通过使用SELECT prop, COUNT() GROUP BY prop. SELECT但是出于原因(R),我想以一种“循环”的方式保持在“单个非分组查询模式”中

此子查询试图模仿 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

那么,主要问题是如何循环进入这样的查询?有这样的机会吗?

更新

感谢Luuk ,问题(2)的答案在这里找到我刚刚为 (...) 子查询分配了一个别名,它成功了。当然,我得到了6因此,问题(1)仍然不清楚。SELECT Max(C) FROM (...) AS sq

我也尝试过以这种方式进行迭代(Q3)

SELECT (SELECT prop_2 FROM t_2 WHERE t_2.prop_1 = t_1.prop) AS isq FROM t_1;   

这里 int_2 prop_2prop_1(又名propin t_1)是多对一的。因此,在整个过程中,我们的isq (内部选择查询)prop_2为每个prop返回几个(行)值t_1这就是(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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章