小组结果 sql

group results in sql

在我的设置中 table 有一个字段,其内容是:

  - Law 1  
  - Law 2  
  - Chemistry 1 
  - Chemistry 2 
  - History 1 
  - History 2
  - Modern language 1
  - Modern language 2
  - Modern language 3

(成绩)

我想知道是否有一种简单的方法来构造 SELECT sql 查询 returns:

目标是过滤显示所有教师的门户,以便仅显示分隔学科的教师。

提前致谢。

不清楚确切您的要求。如果你想删除最后两个字符并获得不同的值,你可以这样做:

select distinct left(col, len(col) - 2)
from t;

所有数据库都支持left()len()的功能;但是,该名称在您使用的数据库中可能不同。

如果您使用的是 MS Sql,您可以使用 substring 和 charindex 来动态计算数据。如果你想要 space 之前的值,假设 "LAW 1",如果你想通过识别两者之间的 space 来获得 LAW,这将很有帮助。

with cte as (select 'Law 1'       as Cola union all 
select 'Law 2'       as Cola union all 
select 'Law 3'       as Cola union all   
select 'Chemistry 1' as Cola union all 
select 'Chemistry 2' as Cola union all 
select 'History 1'   as Cola union all 
select 'History 2'   as Cola )

select    substring(cola, 1  ,  CHARINDEX(' ',cola)-1) Calculated_value   from cte
group by  substring(cola, 1  ,  CHARINDEX(' ',cola)-1);

输出:

Calculated_value
Chemistry
History
Law

此要求的解决方案取决于您使用的数据库。
这是 MySql:

SELECT DISTINCT 
  TRIM(TRIM(TRAILING SUBSTRING_INDEX(col, ' ', -1) FROM col)) grouped_col
FROM tablename 

此查询删除列 col 值的最后 space 之后的所有内容(将其更改为列的实际名称),最后 returns 所有不同的列的值。
demo.
结果:

| grouped_col     |
| --------------- |
| Law             |
| Chemistry       |
| History         |
| Modern language |

只需替换不需要的字符子字符串和 select distinct,因为我看到您希望通过分组在查询中进行一些聚合。

如果您也想分组和聚合,请在分组依据中使用 output 下方的列并删除 distinct

  Select distinct REPLACE(column, 
     SUBSTR(COLUMN, 
     INSTR(COLUMN, ' '), 
       LENGTH(COLUMN)) 
      , "" ) as output FROM TABLE;

我认为您需要的是在最后一次出现 space 字符之前提取所有内容的东西。试试这个..

SQL 服务器

select distinct left(col, len(col) - charindex(' ', reverse(col))) as subject
from your_table;

MySQL

select distinct left(col, length(col) - locate(' ', reverse(col))) as subject
from your_table;

Filemaker 仅支持 SQL 的有限子集。以下可能对您有用(假设您的数字永远不会超过 9):

SELECT DISTINCT LEFT(YourField, LENGTH(YourField) - 2) 
FROM YourTable

The goal is to filter a portal that shows all teachers in order to show only teachers of a delimited subject.

不确定 SQL 查询对此有何帮助。正确的解决方案(正如评论中已经建议的那样)是有两个单独的字段,一个用于主题,一个用于序号。那么任务就变得微不足道了。