2、在oracle中:
1)where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1
2)而order by 则可以直接使用别名,如select col1 ccc from table order by ccc
这和sql 的执行顺序是有关的,where中的部分先执行 -> 如果有group by,接着执行group by -> select中的函数计算、别名指定再运行-> 最后order by
因此,字段、表达式的别名在where子句和group by子句都是不能使用的,而在order by中不仅可以使用别名,甚至可以直接使用栏位的下标来进行排序,如:order by 1 desc,2 asc
1、在mysql中,group by中可以使用别名;where中不能使用别名;order by中可以使用别名。2、在oracle中:1)where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1
My
SQL语句
的执行顺序:
FROM -> WHERE ->
GROUP
BY ->
HAVING
-> SELECT -> DISTINCT -> UNION ->
ORDER
BY
where后面是不能
使用
查询字段的
别名
的,而
group
by、
having
、
order
by后面可以
使用
字段的
别名
。
为什么呢?
这与
sql语句
执行的顺序是有关系的,当出现select 以及
where时,表明这是查询条件语句,那么先执行where,在select
中
对字段设置别
今天在做统计时为了吧名称转换,故
使用
了
别名
,但是
group
by 后的结果用了
别名
,结果确实出来了,却没有按
别名
的分组;
Group
by不能用
别名
的原因,因为执行到
group
by 时,还没执行到select
中
的
别名
,所以
别名
还没生效。所以
别名
只能放到比如
order
中
,distinct
中
。
遇到这种问题可以
使用
子查询替代
在sql查询
中
,取前N项几乎是最为入门的操作了,怎么这里也有坑吗?当然有的哦!一个最简单的场景,我们企图在一个学生成绩表
中
查询前三名。语句应该类似于:// SQL server:
Select top 3 * from 成绩表
order
by 成绩 desc
// MySQL、PGSql:
SELECT * FROM 成绩表
order
by 成绩 desc LIMIT 3上面的查询,将...
可以在
GROUP
BY子句
中
设置时间戳的精度,以控制聚合级别。例如,如果您有一个包含日期和时间戳的列,并且您希望按小时聚合数据,则可以
使用
DATE_FORMAT函数将时间戳转换为小时级别,并在
GROUP
BY子句
中
使用
该函数的结果。例如:
SELECT DATE_FORMAT(timestamp_column, '%Y-%m-%d %H:00:00') AS hour, COUNT(*) FROM your_table
GROUP
BY hour;
这将按小时级别聚合数据,并返回每个小时的计数。请注意,在
GROUP
BY子句
中
使用
日期格式化函数可能会影响查询性能,因此请谨慎
使用
。