sqlServer關於group by的問題

2021-06-28 01:16:04 字數 1585 閱讀 1712

今天在做asp.net的時候遇到了些小問題,有個要求:

新增乙個資料來源控制項,通過多表查詢,找出銷售量在前十的產品。(在salesorderdetail表的orderqty欄位表示訂貨量,希望大家先嘗試自己寫查詢語句,實在沒辦法解決才去看參***。)

有個屁的參***呀!!! 只好自己寫語句,在這過程中複習了很多關於sql語句的知識。

遇到最多的情況就是:

選擇列表中的列 'product.modifieddate' 無效,因為該列沒有包含在聚合函式或 group by 子句中。

這個主要是對group by 的不了解。

網上找到了這樣一段話:

也就是如果要用group by,要顯示的字段就都必須新增到group by 裡面去。

讓我們分析一下group by 的過程:

先執行select 的操作返回乙個程式集,

--然後去執行分組的操作,這時候他將根據group by 後面的字段

--進行分組,並且將相同的字段並稱一列資料,如果group by 後面沒有這個字段的話就要分成好多的資料。

--但是分組就只能將相同的資料分成兩列資料,而一列中又只能放入乙個字段,所以那些沒有進行分組的

--資料系統不知道將資料放入**,所以就出現此錯誤

附下午寫的sql語句:

select top(10) product.* from product  left join salesorderdetail on  product.productid=  salesorderdetail.productid where( salesorderdetail.productid= any(select top(10) salesorderdetail.productid

from salesorderdetail group by salesorderdetail.productid order by sum(salesorderdetail.orderqty) desc)) group by product.productid,product.name,productnumber,product.color,product.size,product.weight,product.price,product.productsubcategoryid,product.rowguid,product.modifieddate

逗了。。 弄得這麼複雜 應該這樣

select top(10) 

product.productid, product.name, product.color,unitprice,sum(salesorderdetail.orderqty)as totalorderqty

from product inner join salesorderdetail

on product.productid = salesorderdetail.productid group by product.productid,product.name,product.color,unitprice

order by sum(salesorderdetail.orderqty) desc

MySQL之優化order by和group by

目錄 orderby 優化order by的前提 orderby子句盡量不要產生filesort 如果orderby子句不可避免產生了filesort的優化 總結 groupby 首先我們要做的肯定是把orderby的字段建立成索引 order by盡量使用index方式而不要使用filesort方...

關於sqlserver除錯

現在很多企業使用資料庫內部處理過程進行程式設計。這樣的好處是對後來維護的人員可以方便修改。資料庫指令碼也是解析語句,不用編譯生產exe等檔案,直接可以執行。隨著儲存過程的複雜性越來越大,在除錯的時候也有困難。例如 儲存過程的臨時表如何檢視?1 要在本資料庫伺服器上除錯。不能遠端除錯 2 使用sa和 ...

SQL Server 關於服務賬戶

sql server中的每個服務代表乙個程序或一組程序,每個程序需要有訪問sql server相關檔案 如.mdf ndf 和 ldf 等檔案 或登錄檔或者sql server安裝目錄的許可權。這些服務要在顯示登入界面前就載入完成。為了能讓sql server服務在作業系統中正常的啟動和執行,就需要...