我的查询工作正常并提供结果
SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk
结果数据:
PartyName Risk SubTotal
A High 100
B Med 25
A Low 30
A Med 70
B Low 10
现在我想SUM
每个派对的总数并查看前10名。我遇到了两个问题:
1。关于SUM的TOP(10)
如果我执行以下操作:
SELECT TOP(10) PartyName, SUM(SubTotal) Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) AS S
GROUP BY PartyName
我最终获得了前10个而不是10个最高金额
2。错误:
专栏' S.Risk'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
当我尝试以下操作时:
SELECT TOP(10) PartyName, Risk, SUM(SubTotal) Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) AS S
GROUP BY PartyName
我需要的是
PartyName Risk SubTotal Total
A High 100 200
B Med 25 35
A Low 30 200
A Med 70 200
B Low 10 30
答案 0 :(得分:3)
如果您想要“最高10个小计”,则需要ORDER BY
。
SELECT TOP(10) PartyName, SUM(SubTotal) Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) AS S
GROUP BY PartyName
ORDER BY Total DESC
这有点棘手,因为在GROUP BY
求和时你希望PartyName
同时Risk
和SubTotal
,但你也想要SubTotal
求和} PartyName
每个Total
没有卷起来。
执行此操作的一种方法是将表格加入另一个几乎相同的表格,但第二个表格将选择每个派对的Risk
(完全忽略ON PartyName
),这样我们就可以获得分组总数。
然后我们可以将其与我们的初始查询Total
合并,以获得一个返回汇总数据的查询,以及每Party
重复SELECT TOP(10) s.PartyName, s.Risk, s.SubTotal, s2.Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) S
LEFT JOIN
(SELECT PartyName, SUM(CAST(Amount AS DECIMAL)) Total
FROM CustomerData
GROUP BY PartyName) S2
ON S.PartyName = S2.Partyname
。
import cv2
import numpy as np
template = cv2.imread('scratch_test.png',0)
w, h = template.shape[::-1]
video_capture = cv2.VideoCapture(0)
while True:
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
if gray.shape[0]>template.shape[0] and gray.shape[1]>template.shape[1]:
res = cv2.matchTemplate(gray,template,cv2.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv2.rectangle(frame, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv2.imshow('orginal', frame)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
else:
print "Error : Template and image size are: ", template.shape, gray.shape
答案 1 :(得分:0)
如果外部查询需要Risk,则底部为GROUP BY。
SELECT TOP(10) PartyName, Risk, SUM(SubTotal) Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) AS S
GROUP BY PartyName, Risk
OR
SELECT TOP 10 * FROM
( SELECT PartyName, Risk, SUM(SubTotal) Total
FROM
(SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData
GROUP BY PartyName, Risk) AS S
GROUP BY PartyName, Risk
)
ORDER BY Total DESC
答案 2 :(得分:0)
在您使用的第一个声明中,使用TOP(10),最后添加:ORDER BY Total DESC。多数民众赞成!:
SELECT TOP(10) PartyName, SUM(SubTotal) Total
FROM (SELECT PartyName, Risk, SUM(CAST(Amount AS DECIMAL)) SubTotal
FROM CustomerData GROUP BY PartyName, Risk) AS S
GROUP BY PartyName
ORDER BY Total DESC