SQLite:多个聚合列

标签 sql sqlite aggregate-functions

我对 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/

相关文章:

php - 按日期排序并选择您想要在 php 中查看的类别

sql - TSQL:是否有办法限制返回的行并计算没有限制的返回总数(不将其添加到每一行)?

iOS:如何在sqlite中插入特殊字符如 "or '

sql - 这是真的?表现问题

python - MySQL 列名中的通配符

python - Sqlite3写入只读数据库

android - SQLite数据库没有为 Lollipop 插入ID

python - 如何聚合 NumPy 记录数组(总和、最小值、最大值等)?

sql - 限制sql窗口函数中的结果集

sqlite - SQLite最小/最大怪异行为