Sql 下面的查询是什么意思?

Sql 下面的查询是什么意思?,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,请参考以下用oracle编写的查询。谁能告诉我这个问题的意思吗 select count(*) from dual connect by level <= 5 group by trunc(next_day(trunc(sysdate,'mm')-1, 'sunday') + (level -1)*7,'mm') 从dual connect by level中选择count(*)如果您检查group by子句返回的部件,则是当月的第一天,计算结果为以下第一个星期日: SQL> se

请参考以下用oracle编写的查询。谁能告诉我这个问题的意思吗

select count(*) from dual connect by level <= 5
group by trunc(next_day(trunc(sysdate,'mm')-1, 'sunday') + (level -1)*7,'mm')

从dual connect by level中选择count(*)如果您检查group by子句返回的部件,则是当月的第一天,计算结果为以下第一个星期日:

SQL> select trunc(sysdate, 'mm') trnc,
  2         next_day(trunc(sysdate, 'mm') - 1, 'sunday') ne_day
  3  from dual;

TRNC       NE_DAY
---------- ----------
01.04.2021 04.04.2021
           ^
           first Sunday in April 2021
connectby
子句返回5行。哪一个?当查询从只有一列(
dummy
)且其值为
'X'
dual
中选择时,您不会看到太多。但是如果您检查
GROUPBY
子句中的内容并选择这些值,您将得到

SQL> select trunc(next_day(trunc(sysdate,'mm')-1, 'sunday') + (level -1)*7,'mm')
  2  from dual
  3  connect by level <= 5;

TRUNC(NEXT
----------
01.04.2021        --> 4 rows of 1st of April 2021
01.04.2021
01.04.2021
01.04.2021
01.05.2021        --> 1 row  of 5th of April 2021

SQL>
SQL> select count(*)
  2  from dual
  3  connect by level <= 5
  4  group by trunc(next_day(trunc(sysdate,'mm')-1, 'sunday') + (level -1)*7,'mm');

  COUNT(*)
----------
         1        --> that's for 5th of April 2021
         4        --> that's for 1st of April 2021

SQL>