我不明白为什么在解析的ORDER BY函数中使用COUNT子句时会有不同的结果。
使用一个简单的例子:
with req as
(select 1 as n, 'A' as cls
from dual
union
select 2 as n, 'A' as cls
from dual)
select req.*, count(*) over(partition by cls) as cnt from req;
给出以下结果:
N CLS CNT
2 A 2
1 A 2
然而,当在分析子句中添加ORDER BY时,结果
我刚刚发现了BigQuery的合格运算符,并在上阅读了有关它的文章。
但是,这些文档并没有解释为什么我应该使用QUALIFY而不是普通的WHERE谓词。如果我们以文档中提供的例子为例:
SELECT item,
RANK() OVER (PARTITION BY category ORDER BY purchases DESC) as rank
FROM Produce
WHERE Produce.category = 'vegetable'
QUALIFY rank <= 3
该查询也可以编写为
SELECT
item,
RANK() OVER (PAR
为什么此SQL查询显示语法错误:
SELECT orderNumber, SUM(quantityOrdered) AS 'Total'
FROM orderdetails
GROUP BY orderNumber
ORDER BY quantityOrdered;
但是下面的查询没有显示语法错误,并给出了正确的结果:
SELECT orderNumber, SUM(quantityOrdered) AS 'Total'
FROM orderdetails
GROUP BY orderNumber
ORDER BY Total;
我有一个简单的查询,它似乎提供了所需的结果:
select op.opr, op.last, op.dept, count(*) as counter
from DWRVWR.BCA_M_OPRIDS1 op
where op.opr = '21B'
group by op.opr, op.last ,op.dept;
我的原始查询不返回结果。唯一的区别是按条款分组的顺序:
select op.opr, op.last, op.dept, count(*) as counter
from DWRVWR.BCA_M_OPRIDS1 op
where op.opr = '
我有个疑问
SELECT COUNT(*) AS "CNT",
imei
FROM devices
执行得很好。我希望使用WHERE语句进一步限制查询。(人性化的)逻辑下一步是按以下方式修改查询:
SELECT COUNT(*) AS "CNT",
imei
FROM devices
WHERE CNT > 1
但是,这会导致错误消息ORA-00904:"CNT":无效标识符。由于某些原因,将查询包装在另一个查询中会产生所需的结果:
SELECT *
FROM (SELECT COUNT(*)
我试图从选择2标签srcip和max的计数中获得最大值,但每次我包括srcip时,我都必须在末尾使用group by srcip,并给出结果,因为最大值甚至都不在那里。
当我像这样编写查询时,它会给出正确的最大值,但我也希望选择srcip。
Select max(count1) as maximum
from (SELECT srcip,count(srcip) as count1 from data group by srcip)t;
但是,当我在select中包含srcip时,我会得到结果,因为没有max函数
Select srcip,max(count1) as maximum
我有一个页面来显示每个用户的10条信息(不要问我为什么)
我有以下代码:
SELECT *, row_number() over(partition by user_id) as row_num
FROM "posts"
WHERE row_num <= 10
它不起作用。
当我这么做时:
SELECT *
FROM (
SELECT *, row_number() over(partition by user_id) as row_num FROM "posts") as T
WHERE row_num <= 10
确实有用。
为什么我需要嵌套查询
示例:从count_read的文章顺序中选择title,count_read。ROW_NUM应该用什么来代替?
我不喜欢在得到结果之后按程序生成索引,因为我希望通过查询上面的示例DQL将结果数据插入到表Rank中。
我想要达到的目标也许是:
"INSERT INTO RANK r (title, index, lastIndex)
SELECT title,ROW_NUM,(SELECT index FROM RANK WHERE id = :id - 1) FROM article ORDER BY count_read"
提前谢谢..。
我有两张桌子--产品,活动。每种产品都可以具有多种活性(1:n)。每个活动都有一个(INT)操作列。我需要查询所有产品和10最新的活动的总和(SUM)。
我的第一次尝试是使用子查询:
select p.*, (select sum(a.action) from activity a
where a.product_id = p.product_id
order by a.timestamp desc limit 10) recent
from product p
然而,结果是不正确的。我意识到子查询没有使用这个限制,而是返回与product_id匹配的所有活动
在Redshift (使用Postgres 8)中,我对这个运行的sum有问题:
select extract(month from registration_time) as month
, extract(week from registration_time)%4+1 as week
, extract(day from registration_time) as day
, count(*) as count_of_users_registered
, sum(count(*)) over (ORDER BY (1,2,3))
from loyalty.v_user
group
我正在尝试创建一个pl/pgsql,它相当于熊猫的'ffill‘函数。函数应该转发fill null值。在这个例子中,我可以做一个前向填充,但是当我试图从我的过程中创建一个函数时,我会出现错误。函数似乎准确地反映了这个过程,但我在... as $1部分得到了一个语法错误。
为什么?我应该读些什么来澄清?
-- Forward fill experiment
DROP TABLE IF EXISTS example;
create temporary table example(id int, str text, val integer);
insert into example val
我正在努力理解,窗口函数是如何内部工作的。
ID,Amt
A,1
B,2
C,3
D,4
E,5
如果我运行这个,就会给出total列中每条记录中所有金额的总和。
Select ID, SUM (AMT) OVER () total from table
但是当我运行这个,它会给我累积的总和。
Select ID, SUM (AMT) OVER (order by ID) total from table
试图了解当它的OVER()和OVER(order by ID)
我所理解的是,当没有在OVER中定义分区时,它将一切都视为单个分区。但是无法理解当我们在order by Id中添加over
我有模式(Oracle11g R2):
CREATE TABLE users (
id INT NOT NULL,
name VARCHAR(30) NOT NULL,
num int NOT NULL
);
INSERT INTO users (id, name, num) VALUES (1,'alan',5);
INSERT INTO users (id, name, num) VALUES (2,'alan',4);
INSERT INTO users (id, name, num) VALUES (3,'julia',10
我经常使用sum() over()来计算累积值,但是今天,我尝试了count ()over(),结果超出了我的预期,有人能解释为什么结果在同一天重复记录吗?
我知道通常的方法是按日期计算(不同的)组,然后按日期对sum()进行计数(按日期排序),只是好奇“count (Id)over(按日期排序)”的结果。
Select pre.date,count(person_id) over (order by pre.date)
From (select distinct person_id, date from events) pre
结果将在同一天重复记录。
因此,我正在研究一种解决方案,其中涉及三列“行号”、“类型”、“因素”。基于此,我想生成列"factor_adj“。我面临的问题是,这取决于有条件的前一行。我一直在玩窗口函数,但似乎无法得到预期的结果。我怎样才能做到这一点?
这方面的伪逻辑如下:
IF "row number" == 1
then 1
ELSE IF Previous Type == 'related' then
Previous factor_adj*0.1
ELSE
Previous factor_adj*0.2
END
下面是"factor_adj“
下面的查询给出了奇怪的结果。看起来,FIRST_VALUE的默认窗口始终是无界的,而LAST_VALUE的默认窗口与CURRENT_ROW和CURRENT_ROW类似。为什么会这样呢?
select
to_char(INVOICEDATE,'iw') WEEK,
SUM(total) AS TOTAL_SUM,
FIRST_VALUE(to_char(INVOICEDATE,'iw')) OVER (order by SUM(total)) minimum,
FIRST_VALUE(to_char(INVOICEDATE,'iw')) OVE
SELECT
first_name + ' ' + last_name AS name,
country,
birthdate,
-- Retrieve the birthdate of the oldest voter per country
FIRST_VALUE(birthdate)
OVER (PARTITION BY country ORDER BY birthdate) AS oldest_voter,
-- Retrieve the birthdate of the youngest voter per
我正在为用Python的sqlite3编写窗口框架而挣扎。基本我有这个数据:
我想把所有的客户(买卖)集中在同一天和同一周。我正在使用下面的sqlite3代码:
pd.read_sql_query("""SELECT strftime('%Y-%m-%d', execution_time) AS dia,
COUNT(customer_id) AS cons_dia,
SUM(cons_dia) OVER
考虑一下表t
x y
1 2
3 4
还有那个有点天真的查询
SELECT
ROW_NUMBER() OVER ( ORDER BY x ) row_num,
x,
y
FROM
t
WHERE
x = 3;
哪个产出(可以理解)
row_num x y
1 3 4
但是,我想
row_num x y
2 3 4
(row_num应该在未过滤的表上“计算”,所以在应用WHERE子句之前)
我试过了
SELECT
ROW_NUMBER() OVER ( ORDER BY t.x ) row_num,
t
使用MySQL工作台,我成功地创建了一个create和insert脚本(请参阅下面的所有这些脚本)。
用剧本
SELECT abbr_Company, name_Company, ddate, turnover, name_Employee
FROM Profit
INNER JOIN Employee ON Employee.idEmployee = Profit.idEmployee
INNER JOIN Company ON Profit.idCompany = Company.idCompany
ORDER BY idCodeTurnover
我可以生成以下结果集:
📷
问:如何使用S
我试图在一个查询中计算N行的移动平均值N行,的所有行的。在这个例子中,我试图计算50行的移动平均值。
SELECT
h1.date,
h1.security_id,
( SELECT
AVG(last50.close)
FROM (
SELECT h.close
FROM history as h
WHERE h.date <= h1.date AND h.security_id = h1.security_id
OR
我学到了:
; with temp as (
select row_number() over (partition by First_PK order by Second_PK desc)
as row_num, First_PK, Second_PK, data
from test)
select * from temp
where row_num = 1
但我现在面临另一个问题,我希望使用where row_num = MAX (我的意思是最大值)而不是where row_num = 1。
我想使用星火SQL窗口函数来进行一些聚合和窗口化。
假设我使用这里提供的示例表( a: )
我想运行这个查询,给出每个类别的最大2收入,同时也给出每个类别的产品计数。
在我运行这个查询之后
SELECT
product,
category,
revenue
FROM (
SELECT
product,
category,
revenue,
dense_rank() OVER (PARTITION BY category ORDER BY revenue DESC) as rank
count(*) OVER (PARTITION
我有下面的带有QUALIFY语句的SQL代码,它似乎是BigQuery。
SELECT A, B, sum(C), row_number()
over(partition by A order by sum(C) desc) as row_num
FROM mock_table
group by 1,2
QUALIFY row_num > 5
order by 1
在MSSql、MySql或PSql中,我应该使用什么来实现相同的结果?
我在my表中有三个列: Id、name和mark。所有的行都是彼此分开的。我使用以下sql语句。在窗口函数中,我不对这两个SQL语句使用order。我只有隔断和范围框架。
理想情况下,它们应该根据窗口函数在派生列下给出相同的结果;但是第一个总是给出窗口下的最大标记;而第二个则比较上一行和当前的row+1并给出预期的结果。第一个是非常奇怪的,即使我给出了前一行和当前行的无界;实际上,它考虑的是整个窗口,而不是给定的框架。
有人能帮忙吗。
语句-1:
select *
,max(mark) over( partition by name rows between unbound
( a)引用来自
对于每一行,其分区中都有一组称为其窗口框架的行。许多(但不是所有)窗口函数只作用于窗口框架的行,而不是整个分区。默认情况下,如果提供ORDER,则框架由从分区开始到当前行的所有行以及根据ORDER子句与当前行相等的任何以下行组成。
我假设Row_Number不只是对窗口框架的行起作用,而是总是对分区的所有行执行操作?
b)
默认情况下,如果提供ORDER,则框架由从分区开始到当前行的所有行以及根据ORDER子句与当前行相等的任何以下行组成。
我假设这只适用于那些只对窗口框架的行起作用的窗口函数(因此上面的引号对于ROW_NUMBER()函数不是正确的)?
c) 讨论了Po
有没有办法使用sum窗口函数来获得以下绿色结果
我可以使用以下命令获得总数,但它给出的是一个运行总数,我正在寻找一个组总数
sum(groupvolume) OVER ( PARTITION BY geo_group ORDER BY Month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS group_volume