iT邦幫忙

1

mysql查詢語法

  • 分享至 

  • xImage

資料表:

name pay
小明 50
小明 50
小華 100
小美 150
小美 150
小美 150

加總人員之花費但最多以2筆加總 ,例如小美有3筆150開銷那最多就是以2筆來計算
目標table:

name pay
小明 100
小華 100
小美 300

請問該如何下sql語法?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
may031556
iT邦新手 5 級 ‧ 2022-07-13 13:04:19
最佳解答
CREATE TABLE A (
 NAME VARCHAR(5)
,PAY INT
);

INSERT INTO A(NAME, PAY) VALUES 
 ('小明','50')
,('小明','50')
,('小華','100')
,('小美','150')
,('小美','150')
,('小美','150')
;

SELECT NAME, SUM(PAY) PAY
FROM (
	SELECT A.*, ROW_NUMBER() OVER (PARTITION BY NAME) SN FROM A) B
WHERE SN <= 2
GROUP BY NAME;
3
實習工程師
iT邦新手 1 級 ‧ 2022-07-13 12:02:27
CREATE TABLE #temp (
	[name] nvarchar(20)
	,pay  int
)
INSERT INTO #temp([name],pay) Values('小明',50)
INSERT INTO #temp([name],pay) Values('小明',50)
INSERT INTO #temp([name],pay) Values('小明',100)
INSERT INTO #temp([name],pay) Values('小華',100)
INSERT INTO #temp([name],pay) Values('小美',150)
INSERT INTO #temp([name],pay) Values('小美',150)
INSERT INTO #temp([name],pay) Values('小美',150)


SELECT 
	 [name]
	 ,(
			SELECT
				SUM(pay) 
			FROM (
				SELECT 
					ROW_NUMBER() OVER (ORDER BY [name] ASC ) as ID
					,pay
				FROM #temp	AS temp_Test
				WHERE temp_Test.[name] =#temp.[name]
			)AS Temp
			WHERE  ID <=2
	 ) AS Pay
FROM #temp	
GROUP BY [name]

我用MS SQL寫的,可以參考看看。(以上語法僅參考用)

sibulun iT邦新手 5 級 ‧ 2022-07-13 13:51:32 檢舉

可以執行 ,但小弟資質愚鈍 ,獨立執行以下這段一直不成功

SELECT ROW_NUMBER() OVER (ORDER BY [name] ASC ) as ID
,pay FROM #temp	AS temp_Test
WHERE temp_Test.[name] =#temp.[name]

了解,因為表中有關聯表的欄位,無法獨立執行這一段

WHERE temp_Test.[name] =#temp.[name]

我要發表回答

立即登入回答