1. 程式人生 > >儲存過程使用sum()、count()提供因為該列沒有包含在聚合函式或 GROUP BY 子句中

儲存過程使用sum()、count()提供因為該列沒有包含在聚合函式或 GROUP BY 子句中

SELECT top 10 *,  
			5 totalPaidTimes,
			logID id,
			sum(paidMoney) totalPaidMoney,
			CONVERT(varchar(100), addTime, 120) addTimeFormat,   --新增時間
			CONVERT(varchar(100), addTime, 23) addTimeDay,   --新增時間的年月日
			CONVERT(varchar(100), addTime, 8) addTimeTime   --新增時間的時分秒 

			from tblShopOrderPayLog where orderID =16  order by logID desc

在一個專案中,要輸出訂單支付記錄列表,並計算訂單總支付金額,執行上述sql語句提示:

訊息 8120,級別 16,狀態 1,第 1 行
選擇列表中的列 'tblShopOrderPayLog.logID' 無效,因為該列沒有包含在聚合函式或 GROUP BY 子句中。
只要去掉sum就可以。

原因:應該是因為不能select *,sum(paidMoney)這麼寫。

如果改成每個欄位都要包含在group by裡,是沒問題的:

select logID,orderID,sum(paidMoney) total from tblShopOrderPayLog where orderID =16  group by logID,orderID 

但是輸出的結果不是自己想要的。統計的是分組以後的結果,而不是全部。

logID orderID total

1161.00
2161.00
3161.00
4161.00

5161.00

解決辦法:

計算總價的sum單獨用一條sql語句來獲取 :

select sum(paidMoney) from tblShopOrderPayLog where orderID =16 

相關推薦

儲存過程使用sum()count()提供因為沒有包含聚合函式 GROUP BY 子句

SELECT top 10 *, 5 totalPaidTimes, logID id, sum(paidMoney) totalPaidMoney, CONVERT(varchar(100), addTime, 120) addTimeForma

SQL---沒有包含聚合函式 GROUP BY 子句

解決方式有2種: from語句中子查詢 根據路測ATU資料表,查詢服務小區參考訊號接收功率RSRP的均值大於-70的小區。 select cellid, avg_rsrp from

MySQL 儲存過程-原理語法函數詳細說明

exp sql 十六進制 作用範圍 安全機制 系統管理員 rtrim 編程 xtra Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後存儲在數據庫中,當需要使用該組SQL語句時用戶只需要通過指定儲存過程的名字並給定參數就可以調用執行它了,簡而言之就是一組

5分鐘學會MySQL儲存過程_1定義及應用場景

                                          &nb

MySQL 儲存過程-原理語法函式詳細說明

Mysql儲存過程是一組為了完成特定功能的SQL語句集,經過編譯之後儲存在資料庫中,當需要使用該組SQL語句時使用者只需要通過指定儲存過程的名字並給定引數就可以呼叫執行它了,簡而言之就是一組已經寫好的命令,需要使用的時候拿出來用就可以了。想要快速的瞭解Mysql儲存過程嗎,就一同看一下下文的“Mys

Oracle 儲存過程 inoutin out 引數的使用方法

1. in 引數 用於接收引數,在子程式內部,不能進行修改。預設的引數模式:in 案例: -- 宣告儲存過程 create or replace procedure pro_in(p_num in number) is begin dbms_output.put_line(p_n

Oralce 儲存過程 cursortype x_cur is ref cursorsys_refcursor 靜態遊標強型別 弱型別動態遊標靜態SQL 動態SQL 結合使用總結

直接上程式碼,使用的開發環境: Oracle Database 11g Release 2(11.2.0.4.0) - Enterprise Edition, PL/SQL Develop 12.0.7,Instantclient_12_2; PL/SQL Develop ->

SQL Server儲存過程Returnoutput引數及使用技巧

SQL Server目前正日益成為WindowNT作業系統上面最為重要的一種資料庫管理系統,隨著 SQL Server2000的推出,微軟的這種資料庫服務系統真正地實現了在WindowsNT/2000系列作業系統一統天下的局面,在微軟的作業系統上,沒有任何一種資料庫系統能

EF呼叫儲存過程 登入新增刪除

--登入儲存過程 create proc [dbo].[dengru] @zhanghoa nvarchar(10), @mima nvarchar(10), @num int output--返回引數的作用是為了給後臺返回結果 as if exists(select * from Students

MySql儲存過程—8條件處理(Condition Handling) / 錯誤異常處理

在遊標裡面我們有簡要的介紹了一個NOT FOUND這個條件處理(錯誤、異常處理)的情況,條件處理涉及到兩個語句,一個是DECLARE...CONDITION,另一個是DECLARE....HANDLER。在遊標的例子中是使用了一個DECLARE....HANDLER。先來看

Oracle儲存過程inoutin out 模式引數

1、in模式引數 輸入模式的引數,用於接收引數,在子程式內部,不能進行修改。預設的引數模式:in。 --定義列印的儲存過程 CREATE OR REPLACE PROCEDURE println (

MySql儲存過程—7遊標(Cursor)

1、遊標的作用及屬性 遊標的作用就是用於對查詢資料庫所返回的記錄進行遍歷,以便進行相應的操作;遊標有下面這些屬性:     a、遊標是隻讀的,也就是不能更新它;     b、遊標是不能滾動的,也就是隻能在一個方向上進行遍歷,不能在記錄之間隨意進退,不能跳過某些記錄;    

MySql含有GROUP BY子句的查詢如何顯示COUNT()為0的結果

前階段工作中發現MySql含有GROUP BY子句的查詢中COUNT()為0的結果不顯示. 而針對於分組統計的此類問題,多數人(包括本人)通常會想到: SELECT PID,COUNT(1) AS SUM FROM SS WHERE FIAG = 1 GROUP BY PID

含有GROUP BY子句的查詢如何顯示COUNT()為0的結果( SELECT語句完整的執行順序)

含有GROUP BY子句的查詢中如何顯示COUNT()為0的結果 本文我們主要介紹了SQL Server資料庫中在使用GROUP BY對查詢出的結果進行分組時,COUNT()為0的結果無法顯示的解決方法,希望能夠對您有所幫助。 在SQL Server資料庫查詢中,為

SQL2000系統表、儲存過程、函式的功能介紹及應用2009年01月21日 星期三 11:38雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL

雖然使用系統儲存過程、系統函式與資訊架構檢視已經可以為我們提供了相當豐富的元資料資訊,但是對於某些特殊的元資料資訊,我們仍然需要直接對系統表進行查詢。因為SQL Server 將所有資料庫物件的資訊均存放在系統表中,作為 SQL Server 的管理、開發人員,瞭解各個系統表的作用將有助於我們瞭解 SQL

mysql儲存過程舉例:100以內的整數除以2468的結果,相加等於多少

學習儲存過程:首先知道它是幹嘛的,  概念:將一組sql語句,完成一個特定的功能,稱之為儲存過程, 寫儲存過程:只能建立、替換、刪除 DROP PROCEDURE IF EXISTS sum; -- procedure 存在則先刪除 create procedure `su

MySQL--儲存過程的迴圈語句程式碼筆記--whilerepeat和loop

mysql> delimiter $$ mysql> create table testB -> ( -> id int(6) not null -> ) $$ Query OK, 0 rows affected (0.86 sec) mysq

MySQL-儲存過程程式碼筆記-inoutinoutdeclare區域性變數和if...else語句

mysql> use test; Database changed mysql> show tables; Empty set (0.00 sec) mysql> use test; Database changed mysql> create table testA

MySQL儲存過程之whilerepeat迴圈

一、while迴圈 CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_WHILE`() BEGIN DECLARE i INT DEFAULT 0; WHILE (i<10) DO /*當滿足條件的時候執行此程式碼塊*/ BE

QT操作Oracle資料庫(事務儲存過程)

QT操作Oracle資料庫可以使用QODBC、QOCI兩種驅動,這裡使用QODBC驅動。在使用QOCI驅動操作oracle時,事務不能回滾,可能是我編譯的QOCI驅動有問題,但是暫時沒有找到原因。 #ifndef QTTEST_H #define QTTEST_H #include <