sql – 计算具有相同关系的行
发布时间:2020-05-24 15:07:14 所属栏目:MsSql 来源:互联网
导读:我有三张桌子.调色板,颜色和关系表palette_color.就像这个样本: http://sqlfiddle.com/#!6/fe832/2 我想计算关系表中具有相同颜色的调色板.正如您在示例中所看到的,我已经在做了.但我相信我的方法效率不高.运行大约需要2秒钟. 我正在使用SQL Server. 这是我
|
我有三张桌子.调色板,颜色和关系表palette_color.就像这个样本: http://sqlfiddle.com/#!6/fe832/2 我想计算关系表中具有相同颜色的调色板.正如您在示例中所看到的,我已经在做了.但我相信我的方法效率不高.运行大约需要2秒钟. 我正在使用SQL Server. 这是我计算行数的地方: (
SELECT count(DISTINCT palette_id) as total FROM palette_color COLOR
WHERE NOT EXISTS
(( (SELECT color_id FROM palette_color WHERE palette_id = PALETTE.id) EXCEPT (SELECT color_id FROM palette_color WHERE palette_id = COLOR.palette_id) )
UNION ALL
( (SELECT color_id FROM palette_color WHERE palette_id = COLOR.palette_id) EXCEPT (SELECT color_id FROM palette_color WHERE palette_id = PALETTE.id) ))
) as total
在where子句中,我确保只有第一个调色板出现在结果上 WHERE id =
(
SELECT MIN(palette_id) FROM palette_color COLOR
WHERE NOT EXISTS
(( (SELECT color_id FROM palette_color WHERE palette_id = PALETTE.id) EXCEPT (SELECT color_id FROM palette_color WHERE palette_id = COLOR.palette_id) )
UNION ALL
( (SELECT color_id FROM palette_color WHERE palette_id = COLOR.palette_id) EXCEPT (SELECT color_id FROM palette_color WHERE palette_id = PALETTE.id) ))
)
解决方法在这里,我使用FOR XML PATH在palete_id中创建所有color_id的字符串列表然后分组并计算每组颜色. SQL FIDDLE DEMO(12ms) with cList as (
SELECT p.id palette_id,STUFF(( SELECT ',' + CAST(pc.color_id as varchar(10) )
FROM palette_color pc
WHERE pc.palette_id = p.id
ORDER BY pc.color_id
FOR
XML PATH('')
),1,'') AS ColorList
FROM palette p
)
select min(palette_id) palette_id,ColorList,count(*) Total
from cList
group by ColorList (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- sql-server – 内存优化表 – 它们真的难以维护吗
- SQL 外链接操作小结 inner join left join right
- MSSQL 2008不能用IP登录问题如何解决
- sql-server – 批量插入w/.fmt文件:操作系统错误
- INSERT和返回ID,或者如果DUPLICATE KEY返回MySQL
- 如何将SQL结果保存到C#变量中?
- sql-server-2008 – 从SQL Server检索的数据是否
- sql – 为什么我允许有两个同名的索引?
- Linq to SQL或Entity Framework for Enterprise
- linq-to-sql – 鉴于LINQ to Entities不支持“自
热点阅读
