我有一个用户表:
|Username|UserType|Points|
|John |A |250 |
|Mary |A |150 |
|Anna |B |600 |
Run Code Online (Sandbox Code Playgroud)
和级别
|UserType|MinPoints|Level |
|A |100 |Bronze |
|A |200 |Silver |
|A |300 |Gold |
|B |500 |Bronze |
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个查询来获取每个用户的级别。类似的东西:
SELECT *
FROM Users U
INNER JOIN (
SELECT TOP 1 Level, U.UserName
FROM Levels L
WHERE L.MinPoints < U.Points
ORDER BY MinPoints DESC
) UL ON U.Username = UL.Username
Run Code Online (Sandbox Code Playgroud)
这样的结果将是:
|Username|UserType|Points|Level |
|John |A |250 |Silver |
|Mary |A |150 |Bronze |
|Anna |B |600 …
Run Code Online (Sandbox Code Playgroud) 从这个微软文档,+
n 定义字符串长度,可以是 1 到 8,000 之间的值。max 表示最大存储大小为 2^31-1 字节(2 GB)。存储大小为输入数据的实际长度+2 个字节。
请帮助我理解这一点。
varchar 的最大字符数似乎是8000
,这远低于2GB
数据的价值。
我看到在varchar(max)
特定表的这一列中有len(mycolumn)
> 100 000 的记录。因此我知道我可以8000
在varchar(max)
列中输入更多字符。
问题 1:8000
角色是如何发挥作用的,我应该在哪里知道它?
问题 2: .net datareader 查询此列是否总是返回包含 100 000+ 个字符的完整结果?
为什么我可以使用 UUID 对行进行排序:
SELECT uuid_nil()
ORDER BY 1;
Run Code Online (Sandbox Code Playgroud)
但我无法计算最大值:
SELECT max(uuid_nil());
Run Code Online (Sandbox Code Playgroud)
[42883] 错误:函数 max(uuid) 不存在
提示:没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。
我知道我可以转换为字符类型 orORDER BY
和LIMIT 1
。我只是好奇为什么我必须使用解决方法。
我正在学习动态树结构组织以及如何设计数据库。
考虑具有以下特征的 DBMS:
二级索引定义在 8 字节的页面上。可以用三级 B 树索引的最大记录数是多少?并且具有三级 B+树?
以下是这些树的两个示例:
我读过那个
B+树比B树浅。因为除了最后一个之外,每个叶节点中只有表示为k的最高键的集合存储在非叶节点中,组织为 B 树。关系 DBMS 内部,第 5 章:动态树结构组织,第 46 页
因此有一个区别,我们存储在 B 树的节点中的东西存储在 B+ 树的叶子中。因此,在我看来,它是(m-1) h(m是顺序,h是高度),因为每个节点最多包含另一个节点的 (m-1) 个键。但这与字节数无关。
然而我在上面提到的书中找到了下表:
因此它会是 20 3.7条记录吗?
对于他们来说,只要有一些值存储在节点中,我就必须除以节点数。而我被困在那里。
我有一个包含一些足球比赛结果的 json 文件。我需要计算哪支球队在客场比赛中获胜最多,以及有多少场胜利。
我的查询是这样的:
db.football.aggregate(
{"$unwind": "$rounds"},
{"$unwind": "$rounds.matches"},
{"$project":
{
//"rounds.matches.team2.name":1,
away_team: "$rounds.matches.team2.name",
winner_away:
{ $cond: {if: {$gt:["$rounds.matches.score2","$rounds.matches.score1"] }, then:1,else :0} },
_id:0
}
},
{"$group": {
_id: {team_name:"$away_team"},
total_wins: {$sum:"$winner_away"}
}
}
)
Run Code Online (Sandbox Code Playgroud)
我得到的是这样的:
{ "_id" : { "team_name" : "Stoke City" }, "total_wins" : 6 }
{ "_id" : { "team_name" : "Newcastle United" }, "total_wins" : 2 }
{ "_id" : { "team_name" : "Chelsea" }, "total_wins" : 7 }
{ "_id" : { "team_name" : …
Run Code Online (Sandbox Code Playgroud) 我有一个查询,用于获取过去 3 个月的 ID 数据。我需要调整它,以便我在三个月中的每一个月都获得最高值。我已经用聚合函数 MAX 尝试了几件事,但我一无所获。
我试图获得过去几个月中每个月的最大值......
以下是查询中的数据,目前按日期 (asc) 排序:
ID 日期值 12410 01/03/2017 12:17 0.000178 12410 01/10/2017 11:36 0.000186 12410 01/17/2017 11:27 0.000189 12410 01/24/2017 13:09 0.000182 12410 01/31/2017 10:37 0.000169 12410 02/07/2017 11:03 0.000214 12410 02/14/2017 11:52 0.000176 12410 02/21/2017 10:51 0.000200 12410 02/28/2017 12:29 0.000194 12410 03/07/2017 08:39 0.000206
这是查询:
从 AnalysisValueTbl 中选择 AnalysisID 作为“ID”,AnalysisDateTime 作为“Date”,AnalysisValue 作为“Value” 在哪里 AnalysisID = 12410 和 DatePart(m, AnalysisDateTime) = DatePart(m, DateAdd(m, -3, getdate())) 和 DatePart(yyyy, AnalysisDateTime) = DatePart(yyyy, DateAdd(m,-3, getdate())) …
我试图弄清楚如何从数据集中检索最小/最大值和最小/最大日期,以及与每个最小/最大值对应的日期值。
示例数据
CREATE TABLE mytable
([ID] int, [TEMP] FLOAT, [DATE] DATE)
;
INSERT INTO mytable
([ID], [TEMP], [DATE])
VALUES
(8305, 16.38320208, '03/22/2002'),
(8305, 17.78320208, '11/15/2010'),
(8305, 16.06320208, '03/11/2002'),
(8305, 18.06320208, '02/01/2007'),
(2034, 5.2, '03/12/1985'),
(2034, 2.24, '05/31/1991'),
(2034, 6.91, '09/15/1981'),
(2034, 7.98, '07/16/1980'),
(2034, 10.03, '03/21/1979'),
(2034, 6.85, '11/19/1982')
;
Run Code Online (Sandbox Code Playgroud)
查询TEMP和DATE列的最小值/最大值:
SELECT ID,
COUNT(TEMP) AS COUNT,
MAX(TEMP) AS MAXTEMP,
MAX(DATE) AS MAXDATE
FROM mytable
GROUP BY ID;
Run Code Online (Sandbox Code Playgroud)
检索这个:
| ID | COUNT | MAXTEMP …
Run Code Online (Sandbox Code Playgroud) 我有一个包含三个整数列的表:
select max(col1), max(col2), max(col3) from mytable
Run Code Online (Sandbox Code Playgroud)
我想要三列的最大值。但这不起作用:
select max(max(col1), max(col2), max(col3)) from mytable
Run Code Online (Sandbox Code Playgroud)
如何完成这项工作?
我使用 PostgreSQL,但我希望这可以用标准 SQL 解决。
从表中获取第二高值已经解决了很多次,但我正在寻找每组中的第二高值。
鉴于此表:
+----+-----+
| A | 10 |
| A | 20 |
| A | 35 | <-- This record
| A | 42 |
| B | 12 |
| B | 21 | <-- This record
| B | 33 |
| C | 14 |
| C | 23 |
| C | 38 |
| C | 41 | <-- This record
| C | 55 |
+----+-----+
Run Code Online (Sandbox Code Playgroud)
我想获得标记的行。
伪代码:
select col_a, penultimate(col_b) …
Run Code Online (Sandbox Code Playgroud) 我应该使用脚本从表中获取最大值。它应该看起来像这样
BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = MAX([Id]) FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)
相反,由于一些错误,它是这样的
BEGIN
DECLARE @MaxID AS INT
SELECT @MaxID = [Id] FROM dbo.suggestion
Insert into suggestion
values(@MaxID+ 1, 'value', 1);
END
Run Code Online (Sandbox Code Playgroud)
到目前为止,它运行良好,由于当我们开始深入研究时出现了其他一些问题,然后它就暴露出来了。
我想知道到目前为止它是如何运作的。
如果有人分享他们的知识,我们将不胜感激
TIA