我试图在sql中执行"=COUNTIF( B1 :B3,">"& B1 )“,它计算列中元素的数量,从B1行到B3,它们比B1大。我们每3行就这么做一次。
假设我们有B列
532.02
667.96
588.1
579.35
623.98
621.29
现在,我们需要计算每三行的元素数,它们比元素B(i)大。
532.02 -> 2 (=COUNTIF( B1 : B3,">"&B1) (从B1到B3的元素数大于B1)
667.96 -> 0 (=COUNTIF( B2 : B3,">"&B2) (从B2到B3的元素数大于B2)
588.1 -> 0 (=COUNTIF( B3 : B3,“>”& B3) (从B3到B3的元素数大于B3)
579.35 -> 2 (=COUNTIF( B4 : B6,">"&B4) (从B4到B6的元素数大于B4)
623.98 -> 0 (=COUNTIF( B5 : B6,">"&B5) (从B5到B6的元素数大于B5)
621.29 -> 0 (=COUNTIF( B6 : B6,">"&B6) (从B6到B6的元素数大于B6)
因此,在sheets/excel中,我们使用这个(=COUNTIF(B5:B6,">"&B5),但是在此基础上如何在sql中写入查询呢?
发布于 2022-10-25 16:00:30
您可以将函数与具有3 (3、6、9等)间隔的新列一起使用。
然后,您可以构建公式以获得interval列的值,并继续使用您所拥有的公式。
所以,要建立的公式应该是:
(=COUNTIF(B5:"B"&=CELL("contents",H33),">"&B5)
在本例中,H33具有间隔。
发布于 2022-10-25 16:12:55
首先,如果您希望有不同的行为取决于记录的位置(3组),那么您必须有某种方式来显示该位置,除非您指定了SQL数据的特定顺序。您可能需要为递增的每一行添加一个唯一的ID。例如:
CREATE TABLE MY_TABLE
(
ROW_N NUMBER,
AMMOUNT NUMBER
);
INSERT INTO MY_TABLE VALUES (1,532.02);
INSERT INTO MY_TABLE VALUES (2,667.96);
INSERT INTO MY_TABLE VALUES (3,588.1);
INSERT INTO MY_TABLE VALUES (4,579.35);
INSERT INTO MY_TABLE VALUES (5,623.98);
INSERT INTO MY_TABLE VALUES (6,621.29);然后,您可以使用模函数来更改行为,具体取决于您所使用的行是否有一个可以被3、1的余数或其余的2完全整除的引用。
为了比较同一表上不同记录之间的值,您可能需要使用一个自联接。在这种情况下,有时需要执行两次,因此需要两个自联接。
我提出的方法是使用case语句,这对于进行几次比较是可以的,但实际上并不是可伸缩的。
我最后使用了联合,只是为了将数据返回到原来的格式。
WITH calcs
AS (SELECT a.row_n AS rown_a,
a.ammount AS ammount_a,
0 AS gtr_a,
b.row_n AS rown_b,
b.ammount AS ammount_b,
CASE
WHEN b.ammount < a.ammount THEN 1
ELSE 0
END AS gtr_b,
c.row_n AS rown_c,
c.ammount AS ammount_c,
CASE
WHEN c.ammount > a.ammount
AND c.ammount < b.ammount THEN 1
WHEN c.ammount < a.ammount
AND c.ammount > b.ammount THEN 1
WHEN c.ammount < a.ammount
AND c.ammount < b.ammount THEN 2
ELSE 0
END AS gtr_c
FROM my_table a,
my_table b,
my_table c
WHERE MOD(a.row_n, 3) = 0
AND b.row_n = a.row_n - 1
AND c.row_n = a.row_n - 2)
SELECT *
FROM (SELECT rown_a,
ammount_a,
gtr_a
FROM calcs
UNION
SELECT rown_b,
ammount_b,
gtr_b
FROM calcs
UNION
SELECT rown_c,
ammount_c,
gtr_c
FROM calcs) x
ORDER BY 1 这个查询有点混乱,但是您试图在SQL中做的是一些奇怪的IMHO。
发布于 2022-10-26 07:30:21
我只是想加点东西。也许这个查询可以为您添加一些值,例如在不使用联接的情况下对下面的行执行操作。
SELECT
ROW#,
B_column first#,
SUM(B_column) OVER (order by ROW# rows between 1 following and 1 following) second#,
SUM(B_column) OVER (order by ROW# rows between 2 following and 2 following) third#
FROM (
SELECT
row_number() over (order by (select NULL)) ROW#,
B_column
FROM [your_schema].[your_table]
) A 谢谢
https://stackoverflow.com/questions/74196055
复制相似问题