sql - 以下查询是什么意思?
问题描述
请参考以下用 oracle 编写的查询。谁能告诉我查询的含义?
select count(*) from dual connect by level <= 5
group by trunc(next_day(trunc(sysdate,'mm')-1, 'sunday') + (level -1)*7,'mm')
解决方案
如果您检查哪个 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
connect by
子句返回 5 行。哪个?当查询选择dual
其中只有一列 ( dummy
) 的值为'X'
时,您不会看到太多。但是,如果您检查group by
子句中的内容并选择这些值,您会得到
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>
当您计算每个值的出现次数(由于该group by
子句)时,您发布的查询的最终结果是
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>
推荐阅读
- python - 如何计算我的单词列表在数据框行中出现的总和?
- android - PagedListAdapter 重新加载没有占位符的数据
- excel - 用户窗体没有正确关闭
- python - 如何使用 python 将多个工作簿与图表结合起来
- php - SQL 查询到 Laravel Eloquent
- sql - 编写 CTE 查询记录重复且顺序错误
- apache-spark - 如何使用 Spark 获取表中的最新值?
- linux - 在文本文件中搜索字符串并返回匹配模式
- c++ - 手动 QUdpSocket 实现是否适合图像流式传输?还是有更好的方法?
- java - 如何使用来自 KStream 输出主题的消息