我对 SQL 世界有点陌生,仍在学习该语言的细节。
我有一个表,其中包含 id、dayOfWeek 和每天的计数。因此,任何给定的 ID 可能会在表中最多出现七次,并且每个 ID 每天都有事件计数。我想重组该表,使每个 id 占一行,一周中的每一天有一列,类似于以下明显不正确的查询:
SELECT id, sum(numEvents where dayOfWeek = 0), sum(numEvents where dayOfWeek = 1) ... from t;
有没有可靠的方法来解决这个问题?
编辑:
我担心我可能不太清楚。理想情况下,该表的结构如下:
id | Sunday | Monday | Tuesday | Wednesday | Thursday | Friday | Saturday
0 | 13 | 45 | 142 | 3 | 36 | 63 | 15336
1 | 17 | 25 | 45 | 364 | 37 | 540 | 0
所以事件 0 在周日发生了 13 次,周一发生了 45 次,等等...我当前的表如下所示:
id | dayOfWeek | count
0 | 0 | 13
0 | 1 | 45
0 | 2 | 142
0 | 3 | 3
0 | 4 | 36
0 | 5 | 63
0 | 6 | 15336
1 | 0 | 17
1 | 1 | 25
...
希望这有助于澄清我的追求。
最佳答案
以下内容很冗长,但应该可以工作(通用 ideone sql demo 不幸的是 SqlFiddle 上的 SqlLite 目前已关闭):
SELECT id,
SUM(case when dayofweek = 1 then numevents else 0 end) as Day1Events,
SUM(case when dayofweek = 2 then numevents else 0 end) as Day2Events,
SUM(case when dayofweek = 3 then numevents else 0 end) as Day3Events
--, etc...
FROM EventTable
GROUP BY ID;
关于SQLite:多个聚合列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20973867/