我的group by怎么不生效呢???????

倒霉幸福猪 2011-03-23 01:29:06
select a.magtitle,a.pid,b.pclick,(SELECT COUNT(*) AS Expr1 FROM dbo.social_circle_post WHERE social_circle_post.circleid>0 and social_circle_post.stype=2) AS num2
from social_circle_post as a
inner join social_circle_post_dynamic as b
on a.pid=b.subjectid
where stype=1 and a.circleid>0
group by a.subjectid,pclick,b.SUBJECTID,a.pid,a.magtitle
...全文
527 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuliushijie 2011-04-05
  • 打赏
  • 举报
回复
group by 语句中的一个或多个属性是用来构造分组的,目的是希望聚集函数作用在一组元组集上,所以要搭配聚集函数使用,楼主的sql语句中没有指明聚集部分
xrongzhen 2011-03-23
  • 打赏
  • 举报
回复
不是没生效 是你Group by后面进行分组的字段太多,导致看不出效果而已
ILOVE_ASPNET 2011-03-23
  • 打赏
  • 举报
回复
楼主你这么group by a.subjectid,pclick,b.SUBJECTID,a.pid,a.magtitle
当然没效果, 你这句话的意思是根据上面所有的字段进行分组,当然by 了等于没有by
这是group 不是 order 分组是根据不同的进行分组,你给了这么多字段能让你分出一样的数据才怪,
而order 则不一样 ,先对第一个字段by 完,仅次第二个和后面的。。
rucypli 2011-03-23
  • 打赏
  • 举报
回复
应该是已经group by过了 但是由于显示的顺序导致你看不出来
qgqch2008 2011-03-23
  • 打赏
  • 举报
回复
看看MSDN怎麼描述的:
SQL Server 2005 線上叢書

GROUP BY (Transact-SQL) 傳送意見
請參閱
全部摺疊全部展開 語言篩選: 全部語言篩選: 多重語言篩選: Visual Basic語言篩選: C#語言篩選: C++語言篩選: J#語言篩選: JScript

Visual Basic(Declaration)
C#
C++
J#
JScript

指定要放置輸出資料列的群組。如果 SELECT 子句 <select list> 包括彙總函數,GROUP BY 會計算每個群組的摘要值。當指定 GROUP BY 時,GROUP BY 清單應該包括選取清單中之任何非彙總運算式中的每個資料行,否則,GROUP BY 運算式必須完全符合選取清單運算式。

附註:
如果未指定 ORDER BY 子句,利用 GROUP BY 子句傳回的群組,不會依照任何特定順序。若要指定特定資料排序,我們建議您一律使用 ORDER BY 子句。



Transact-SQL 語法慣例

語法

[ GROUP BY [ ALL ] group_by_expression [ ,...n ]
[ WITH { CUBE | ROLLUP } ]
]


引數
ALL

包括所有群組和結果集,即使沒有任何資料列符合 WHERE 子句所指定的搜尋條件也是如此。當指定 ALL 時,不符合搜尋條件之群組的摘要資料行都會傳回 Null 值。您不能搭配 CUBE 或 ROLLUP 運算子來指定 ALL。

在存取遠端資料表的查詢中,如果查詢中也有 WHERE 子句,便不支援 GROUP BY ALL。

group_by_expression

這是執行分組的運算式。group_by_expression 也稱為分組資料行。group_by expression 可以是一個資料行,或參考 FROM 子句所傳回之資料行的非彙總運算式。選取清單所定義之資料行別名無法用來指定分組資料行。

附註:
group_by_expression 中無法使用 text、ntext 和 image 類型的資料行。



如果是不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 項目數會受到 GROUP BY 資料行大小、彙總資料行,以及查詢所涉及的彙總值所限制。這項限制起源於保存中繼查詢結果時所需要的中繼工作資料表之 8,060 位元組限制。當指定 CUBE 或 ROLLUP 時,只允許最多 10 個分組運算式。

在 group_by_expression 中,無法直接指定 xml 資料類型方法。相反地,請參閱其中使用 xml 資料類型方法的使用者自訂函數,或參閱使用這些方法的計算資料行。

CUBE

指定除了 GROUP BY 所提供一般資料列之外,也在結果集中導入摘要資料列。結果集中群組或子群組每個可能的組合,都會傳回一個 GROUP BY 摘要資料列。GROUP BY 摘要資料列會在結果中顯示成 NULL,但用來表示所有值。請利用 GROUPING 函數來判斷結果集中的 Null 值是否為 GROUP BY 摘要值。

結果集中的摘要資料列數,由 GROUP BY 子句所包含的資料行數目來決定。GROUP BY 子句中的每個運算元 (資料行) 都會繫結於分組 NULL 之下,且分組適用於所有其他運算元 (資料行)。由於 CUBE 會傳回群組和子群組每個可能的組合,因此,不論分組資料行的指定順序為何,資料列數都相同。

ROLLUP

指定除了 GROUP BY 所提供一般資料列之外,也在結果集中導入摘要資料列。群組是依階層式順序來摘要,從群組中的最低層級到最高層級。群組階層取決於分組資料行的指定順序。分組資料行的順序變更,可能會影響結果集所產生的資料列數。

重要:
當您使用 CUBE 或 ROLLUP 時,不支援相異彙總,如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用它們的話,Microsoft SQL Server 2005 Database Engine 會傳回錯誤訊息,且會取消查詢。



範例
A. 使用簡單的 GROUP BY 子句
下列範例會從 SalesOrderID 資料表中,擷取每個 SalesOrderDetail 的總計。

複製程式碼
USE AdventureWorks ;
GO
SELECT SalesOrderID, SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail sod
GROUP BY SalesOrderID
ORDER BY SalesOrderID ;


B. 搭配多份資料表使用 GROUP BY 子句
下列範例會從聯結了 Employee 資料表的 Address 資料表中,擷取每個 City 的員工人數。

複製程式碼
USE AdventureWorks ;
GO
SELECT a.City, COUNT(e.AddressID) EmployeeCount
FROM HumanResources.Employee e
INNER JOIN Person.Address a
ON e.AddressID = a.AddressID
GROUP BY a.City
ORDER BY a.City ;


請參閱
參考
SELECT (Transact-SQL)
SELECT 子句 (Transact-SQL)

其他資源
使用 CUBE 來摘要資料
使用 ROLLUP 來摘要資料


說明及資訊
取得 SQL Server 2005 協助說明文件意見
Microsoft 非常重視您的意見。如果您要對這個主題進行評分或傳送您對這個主題的意見給說明文件小組,請按一下評分,再按一下 [傳送意見]。如需支援問題的協助,請參閱本產品隨附的技術支援資訊。
差 1
2
3
4
5

如果要將您的意見以電子郵件傳送給 Microsoft,請按一下這裡:
© 2005 Microsoft Corporation.著作權所有,並保留一切權利。
倒霉幸福猪 2011-03-23
  • 打赏
  • 举报
回复
2楼,为什么我聚合不到呢
ChinaITOldMan 2011-03-23
  • 打赏
  • 举报
回复
SQL codeselect
a.magtitle,a.pid,b.pclick,(SELECT COUNT(*) AS Expr1 FROM dbo.social_circle_post WHERE social_circle_post.circleid>0 and social_circle_post.stype=2) AS num2
from
social_circle_post as a
inner join
social_circle_post_dynamic as b
on
a.pid=b.subjectid
where
stype=1 and a.circleid>0
group by
a.magtitle,a.pid,b.pclick--
--小F-- 2011-03-23
  • 打赏
  • 举报
回复
select
a.magtitle,a.pid,b.pclick,(SELECT COUNT(*) AS Expr1 FROM dbo.social_circle_post WHERE social_circle_post.circleid>0 and social_circle_post.stype=2) AS num2
from
social_circle_post as a
inner join
social_circle_post_dynamic as b
on
a.pid=b.subjectid
where
stype=1 and a.circleid>0
group by
a.magtitle,a.pid,b.pclick--这里 跟的是没有聚合的部分
快溜 2011-03-23
  • 打赏
  • 举报
回复
哪儿有问题?

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧