Мне нравится делать это, оценивая записи по некоторым столбцам. В этом случае значения ранга rev
группируются по id
. Те, у кого выше rev
, будут иметь более низкий рейтинг. Таким образом, наивысший rev
будет иметь ранжирование 1.
select id, rev, content
from
(select
@rowNum := if(@prevValue = id, @rowNum+1, 1) as row_num,
id, rev, content,
@prevValue := id
from
(select id, rev, content from YOURTABLE order by id asc, rev desc) TEMP,
(select @rowNum := 1 from DUAL) X,
(select @prevValue := -1 from DUAL) Y) TEMP
where row_num = 1;
Не уверен, что введение переменных делает все это медленнее. Но, по крайней мере, я не дважды запрашиваю YOURTABLE
.
Это потому, что вы сравниваете строку с целым числом. Этот порядок имеет значение.
"56" -lt 7
На самом деле это то же самое, что:
"56" -lt "7"
Альтернативно:
56 -lt "7"
даст вам правильный результат. PowerShell пытается принудить аргумент правой стороны к типу левой стороны.
Вы можете попробовать явное приведение:
[int]$Input -lt $GeneratedNum
Используя switch
:
[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-Debug $GeneratedNum
:lop Do{
switch ((Read-Host 'Take a new guess!') -as [int])
{
{$_ -eq $null}{continue}
{$_ -lt $GeneratedNum}{'Too Low';continue}
{$_ -gt $GeneratedNum}{'Too High';continue}
{$true}{'Good Job!';break lop}
}
} while($true)
Проблема связана с тем, что Read-Host
возвращает строку, поэтому ваш литой $Input
является ArrayListEnumeratorSimple
try:
[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-host $GeneratedNum
$isQuitting = $false
Do{
$Input = (Read-Host "Take a guess!") -as [int]
If($Input -lt $GeneratedNum){Write-Output "Too Low"}
If($Input -gt $GeneratedNum){Write-Output "Too High"}
If($Input -eq $GeneratedNum){Write-Output "Good Job!"; $isQuitting = $true}
} Until($isQuitting -eq $true)
Вы также должны использовать try{}catch{}
, чтобы поймать если вход не является int.
То, что вы должны понимать, заключается в том, что при использовании операторов сравнения PowerShell выбран тип левой части, так что эта часть должна быть введена в левый тип. Зная, что вы могли бы написать следующее, где я просто положил $GeneratedNum
, который является целым числом слева от сравнений:
[int]$GeneratedNum = Get-Random -min 1 -max 101
Write-host $GeneratedNum
$isQuitting = $false
Do{
$Input = (Read-Host "Take a guess!")
If($GeneratedNum -gt $Input){Write-Output "Too Low"}
If($GeneratedNum -lt $Input){Write-Output "Too High"}
If($GeneratedNum -eq $Input){Write-Output "Good Job!"; $isQuitting = $true}
} Until($isQuitting -eq $true)