具有总和和唯一输出的SQL查询
让我将表中的查询建立在以下位置: 此表略经编辑:具有总和和唯一输出的SQL查询,sql,sql-server,sum,unique,Sql,Sql Server,Sum,Unique,让我将表中的查询建立在以下位置: 此表略经编辑: medley_id | class | color | fruit | rating ======================================================== 1 sweet red apple 25 2 sour blue pear 5 3
medley_id | class | color | fruit | rating
========================================================
1 sweet red apple 25
2 sour blue pear 5
3 sweet green apple 12
4 sour red apple 10
5 sour purple kiwi 5
6 sweet purple kiwi 50
7 sour blue kiwi 3
8 sour blue pear 9
我需要一个生成以下结果的查询:
class | color | fruit | sum
============================================
(multiple) red apple 35
sour blue pear 14
sour blue kiwi 3
sweet green apple 12
(multiple) purple kiwi 55
(倍数)不必告诉我倍数是多少,它只需要知道它是倍数,但它并不是让行在总和方面唯一的东西
这有意义吗?有人能帮忙吗?谢谢 我认为这可能会做到:
SELECT
CASE
WHEN COUNT(DISTINCT class) > 1 THEN '(multiple)'
ELSE MAX(class)
END AS class
, color
, fruit
, SUM(rating) AS sum
FROM MyTable
GROUP BY color,fruit
未经测试,但应该可以将此想法形成一个有效的解决方案。无需使用
分组方式,仅使用窗口函数:
SELECT DISTINCT
[class] = CASE WHEN
DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class)
+DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class DESC) - 1 > 1
THEN '(multiple)'
ELSE class
END
,color
,fruit
,[sum]= SUM(rating) OVER (PARTITION BY color, fruit)
FROM #medleys
输出:
╔════════════╦════════╦═══════╦═════╗
║ class ║ color ║ fruit ║ sum ║
╠════════════╬════════╬═══════╬═════╣
║ (multiple) ║ purple ║ kiwi ║ 55 ║
║ (multiple) ║ red ║ apple ║ 35 ║
║ sour ║ blue ║ kiwi ║ 3 ║
║ sour ║ blue ║ pear ║ 14 ║
║ sweet ║ green ║ apple ║ 12 ║
╚════════════╩════════╩═══════╩═════╝
嗨,小伙子,谢谢你的解决方案!它也可以工作(我碰巧使用的是oracle sql)。您认为您的解决方案比前面的解决方案更有效吗?@AlexBudovski Hi,我使用在线格式化程序@MicroBlue比较两个查询之间的执行计划