gpt4 book ai didi

sql-server - SQL Server 分组依据/排序依据

转载 作者:行者123 更新时间:2023-12-02 23:22:17 26 4
gpt4 key购买 nike

我有以下查询

select
datepart(yy, orderDate) as 'year',
datename(mm, OrderDate) as 'month',
count(*) as 'Orders'
from orders (yeah I know its missing the schema, its from a book)
group by
datepart(yy, orderdate),
datename(mm, orderdate)
order by
datepart(yy, orderdate),
datename(mm, orderdate);

它返回 3 列,但 datename(mm, orderdate) 返回一个字符串,因此按它排序将八月放在一月之前,等等。

解决方案如下:

select
datepart(yy, orderDate) as 'year',
datename(mm, OrderDate) as 'month',
count(*) as 'Orders'
from orders (yeah i know its missing the schema, its from a book)
group by
datepart(yy, orderdate),
datename(mm, orderdate),
datepart(mm, orderdate)
order by
datepart(yy, orderdate),
datepart(mm, orderdate);

我仍然对整个 group by/order by 部分及其实际工作原理感到有点困惑。

据我所知,group by 正在创建一个包含 4 列的工作表(这可能是错误的)datepart(yy, orderdate), datename(mm, orderdate), datepart(mm, orderdate) 和一个 count 列。

每次遇到工作表中的 orderdate 时,它都会增加计数,否则它会添加一个新行?

最初我以为我可以从分组中删除DateName(mm, orderdate),但书上说这是不可能的。

如果有人能够逐步了解幕后实际发生的情况/指出一个资源来更详细地解释其工作原理,我将不胜感激。

感谢您的帮助。

最佳答案

任何时候使用聚合函数(COUNT、SUM、MAX 等)时,都需要在 GROUP BY 子句中包含所有其他列。示例中的 COUNT 返回具有相同值的记录数 datepart(yy, orderdate), datename(mm, orderdate), datepart(mm ,订单日期)

一个例子:

SELECT col1, col2, col3, MAX(col4)
FROM MyTable
GROUP BY col1, col2, col3

假设返回的是:

1,2,3,9
1,2,5,9

如果您将查询更改为:

SELECT col1, col2, MIN(col3), MAX(col4)
FROM MyTable
GROUP BY col1, col2

它将返回:

1,2,3,9

请注意,我向 col3 (MIN) 添加了一个聚合函数,因此我能够从 GROUP BY 子句中删除 col3

关于sql-server - SQL Server 分组依据/排序依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com