我想将C,C++,C# and VB,VB.NET
分组为具有汇总结果的不同单个类别。我是否需要将团队名称替换为统一值(e.g. replace C,C++,C# into "C related")
,然后进行分组?
哪一个在性能方面更好?我需要使用Store程序吗? 有人可以告诉我怎么做吗?谢谢!
PS:我正在使用SQL服务器
原始表格
INSERT INTO Table1
([Team], [Room])
VALUES
('Java', 'Room A'),
('Java', 'Room B'),
('Java', 'Room C'),
('Java', 'Room A'),
('Java', 'Room C'),
('C++', 'Room A'),
('C++', 'Room B'),
('C++', 'Room C'),
('C', 'Room A'),
('C', 'Room B'),
('C', 'Room C'),
('VB', 'Room B'),
('VB', 'Room C'),
('C#', 'Room A'),
('C#', 'Room B'),
('C#', 'Room C'),
('VB.Net', 'Room A'),
('VB.Net', 'Room B'),
('VB.Net', 'Room C')
预期输出
('Team', 'Room', 'Count'),
('Java', 'Room A', 2),
('Java', 'Room B', 1),
('Java', 'Room C', 2),
('C related', 'Room A', 3),
('C related', 'Room B', 3),
('C related', 'Room C', 3),
('VB related', 'Room A', 1),
('VB related', 'Room B', 2),
('VB related', 'Room C', 2)
答案 0 :(得分:6)
我会有另一张表将语言映射到语言系列。也就是说,Java将映射到值,例如1,与C相关的值为2,与VB相关的值为3.然后,您可以按语言系列加入两个表和组。这应该比字符串分组更好。如果您有兴趣进一步提高性能,可以对表格系列进行非规范化并为表添加一列。
答案 1 :(得分:2)
您可以使用group by
语句使用case
查询:
select (case when team in ('C', 'C++', 'C#') then 'C related'
when team in ('VB', 'VB.NET') then 'VB related'
else team
end) as team,
room, count(*)
from table1
group by (case when team in ('C', 'C++', 'C#') then 'C related'
when team in ('VB', 'VB.NET') then 'VB related'
else team
end), room;
答案 2 :(得分:0)
如果要在SQL本身进行分组,请先创建查找表 会更快一般。记录数,索引和频率 使用情况也会影响响应时间。
首先为分组团队创建一个查找表:
INSERT INTO Teams ([Team], [TeamGroup])
VALUES
('Java','Java'),
('C++', 'C related'),
('C', 'C related'),
('C#', 'C related'),
('VB', 'VB related'),
('VB.Net', 'VB related')
然后运行此查询:
SELECT g.TeamGroup AS Team, t.Room, count(g.TeamGroup) AS Count
FROM Team AS t
INNER JOIN Teams AS g ON t.Team=g.Team
GROUP BY g.TeamGroup, t.Room