假设我有一个像这样的表结构:
ID | Name | SCHOOLNAME | CODESCHOOL
1 DARK Kindergarten 123 1
2 DARK Kindergarten 111 1
3 Knight NY University 3
4 Knight LA Senior HS 2
5 JOHN HARVARD 3
所以,如何将上面的所有数据显示为:
ID | Name | SCHOOLNAME | CODESCHOOL
1 DARK Kindergarten 123 1
3 Knight NY University 3
5 JOHN HARVARD 3
我的目的是想要显示最大的codeschool数据,但是当我尝试使用下面的查询时:
SELECT NAME, SCHOOLNAME, MAX(CODESCHOOL) FROM TABLE GROUP BY NAME, SCHOOLNAME
但结果是这样的:
ID | Name | SCHOOLNAME | CODESCHOOL
1 DARK Kindergarten 123 1
2 DARK Kindergarten 111 1
3 Knight NY University 3
4 Knight LA Senior HS 2
5 JOHN HARVARD 3
可能是由GROUP BY SCHOOLNAME
引起的,当我试图不选择SCHOOLNAME
时,数据显示的方式与我预期的一样,但我需要SCHOOLNAME
字段来查找我的搜索条件查询
希望你们能帮我解决这个问题
任何帮助将不胜感激
感谢
答案 0 :(得分:0)
使用一些古怪的连接,您可以获得每个类别查询的功能获取最大行数。
您基本上需要做的是将表连接到自身,并确保连接的值仅包含CODESCHOOL
列的顶部值。
我还添加了:schoolname
参数,因为您想按学校名称搜索
示例:
SELECT
A.*
FROM
TABLE1 A
LEFT OUTER JOIN TABLE1 B ON B.NAME = A.NAME
AND B.CODESCHOOL < A.CODESCHOOL
WHERE
B.CODESCHOOL IS NULL AND
(
(A.SCHOOLNAME = :SCHOOLNAME AND :SCHOOLNAME IS NOT NULL) OR
(:SCHOOLNAME IS NULL)
);
这应该创建这个输出,注意黑暗有2个输出,因为它有2行具有相同的代码学校,这是黑暗&#34;类别&#34; /名称中的最大值。
ID|NAME |SCHOOLNAME |CODESCHOOL
--| -----|----------------|----------
4|Knight|LA Senior HS | 2
5|JOHN |HARVARD | 3
2|DARK |Kindergarten 111| 1
1|DARK |Kindergarten 123| 1
它不是最有效的查询,但它应该足以作为一个起点。
旁注:我在https://www.xaprb.com/blog/2007/03/14/how-to-find-the-max-row-per-group-in-sql-without-subqueries/
一段时间内公然偷走了这个逻辑答案 1 :(得分:0)
我正在使用分析窗口函数ROW_NUMBER()。 这将按NAME分组(或分区),然后按DESC顺序选择前1个CODESCHOOL。
Select NAME,
SCHOOLNAME,
CODESCHOOL
From (
Select NAME,
SCHOOLNAME,
CODESCHOOL,
ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY CODESCHOOL DESC) as rn
from myTable)
Where rn = 1;