sql - 如何编写 SQLite 代码以显示指定代码及其来自 group_concat 函数的关联代码?

标签 sql sqlite group-by group-concat having

我正在尝试创建一个包含代码 N09 的表格,其中为学生分配了一组包含 N09 的代码,并且“状态完成”为是。我想使用 group_concat 来查看每个集合是否包含 N09。我看到了一个与此类似的问题,但不幸的是,它没有满足我对表 2 的目标,因为它导致了一个问题。我遇到的这个问题是它一直显示 1 而不是 2、3 用于计数。它还继续显示 N09,而不是 N09 和来自 group_concat 函数的集合中的其他代码。在 SQLite 中是否有代码可以实现我对表 2 的目标?如果我的问题不清楚,请随时发表评论,因为我是新来的。

表 2 的目标:

<表类="s-表"> <头> 学号 状态完成 状态日期 状态时间 代码 计数 Group_Concat(代码) <正文> 1 是 2021-03-03 00:00:00 N09 1 N09 2 是 2021-03-04 10:03:10 N09 2 N09, M33 3 是 2021-03-04 01:00:10 N09 3 N09, Y03, B55

问题:

<表类="s-表"> <头> 学号 状态完成 状态日期 状态时间 代码 计数 Group_Concat(代码) <正文> 1 是 2021-03-03 00:00:00 N09 1 N09 2 是 2021-03-04 10:03:10 N09 1 N09 3 是 2021-03-04 01:00:10 N09 1 N09

示例数据:

<表类="s-表"> <头> 学号 状态完成 状态日期 状态时间 代码 <正文> 1 是 2021-03-03 00:00:00 N09 2 是 2021-03-04 10:03:10 N09 2 是 2021-03-04 10:03:10 M33 3 是 2021-03-04 01:00:10 N09 3 是 2021-03-04 01:00:10 Y03 3 是 2021-03-04 01:00:10 B55

代码:

CREATE TABLE table2 AS
select   Student_ID
        ,Status_Complete  
        ,Status_Date
        ,Status_TIME
        ,Code
        ,count(Code) /*over (partition by Student_ID,Code)*/ as 'Count'
        ,GROUP_CONCAT(Code)
from table1
where Code in ('N09') AND Status_Complete = 'yes'
group by Student_ID, Status_Date, Status_TIME, 'Count'
HAVING 'Count'> 0 
ORDER BY Student_ID;

最佳答案

您应该按 Student_ID 分组,因为每个学生只需要 1 行。
您想要的结果的列 Status_DateStatus_TIME 似乎是每个学生的最小值(我假设日期具有正确的格式 YYYY- mm-dd 这是 SQLite 唯一有效的日期格式)。
此外,应在 HAVING 子句中检查条件 Code = 'N09':

CREATE TABLE table2 AS
SELECT Student_ID, Status_Complete, 
       MIN(Status_Date) Status_Date, 
       TIME(MIN(Status_Date || ' ' || Status_TIME)) Status_TIME, 
       COUNT(*) count,
       GROUP_CONCAT(Code) Codes
FROM table1
WHERE Status_Complete = 'yes'
GROUP BY Student_ID
HAVING SUM(Code = 'N09') > 0
ORDER BY Student_ID;

参见 demo .

切勿对列名使用单引号。
'Count' 在代码中使用时是字符串文字。它从不引用列别名。

关于sql - 如何编写 SQLite 代码以显示指定代码及其来自 group_concat 函数的关联代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73774505/

相关文章:

javascript - 按数组分组并在主数组中添加字段和子数组

javascript - (添加 SQL)Sequelize hasMany 与选项关联

mysql - 如何基于多列键进行子选择

ios - 在 iphone 上替换/加载数据库

sql - SQLite 中的物化 CTE

java - 如果达到最大大小,SQLite Android 数据库如何自动删除?

mysql - MySQL 中不同值的总和

javascript - 使用多个分组查找哈希数组的平均值

sql - Group By Statement proc sql

sql - 按主键所具有的行数进行过滤