Вот хороший способ сделать это
Использовать следующий код:
with temp as (
select count(field1) as summ , field1
from table_name
group by field1 )
select * from temp where summ = (select max(summ) from temp)
Вы можете использовать функцию 0Ah
для чтения буферизованного ввода. Учитывая строковый буфер в ds:dx
, он читает строку длиной до 255. Буферная макет:
Byte 0 String length (0-255)
Byte 1 Bytes read (0-255, filled by DOS on return)
Bytes 2-..Length+2 (The character string including newline as read by DOS).
Пример небольшого COM-файла, который читает строку, а затем возвращает ее обратно пользователь:
org 0x100
start:
push cs
pop ds ; COM file, ds = cs
mov ah, 0x0A ; Function 0Ah Buffered input
mov dx, string_buf ; ds:dx points to string buffer
int 0x21
movzx si, byte [string_buf+1] ; get number of chars read
mov dx, string_buf + 2 ; start of actual string
add si, dx ; si points to string + number of chars read
mov byte [si], '$' ; Terminate string
mov ah, 0x09 ; Function 09h Print character string
int 0x21 ; ds:dx points to string
; Exit
mov ax, 0x4c00
int 0x21
string_buf:
db 255 ; size of buffer in characters
db 0 ; filled by DOS with actual size
times 255 db 0 ; actual string
Обратите внимание, что он перезапишет входную строку (и, следовательно, может не выглядеть так, как программа делает что-нибудь!) [/ g4]
В качестве альтернативы вы можете использовать функцию 01h
и прочитать символы в цикле. Что-то вроде этого (обратите внимание, что он переполнит более поздние буферы, если введено более 255 символов):
org 0x100
start:
push cs
pop ax
mov ds, ax
mov es, ax; make sure ds = es = cs
mov di, string ; es:di points to string
cld ; clear direction flag (so stosb incremements rather than decrements)
read_loop:
mov ah, 0x01 ; Function 01h Read character from stdin with echo
int 0x21
cmp al, 0x0D ; character is carriage return?
je read_done ; yes? exit the loop
stosb ; store the character at es:di and increment di
jmp read_loop ; loop again
read_done:
mov al, '$'
stosb ; 'Make sure the string is '$' terminated
mov dx, string ; ds:dx points to string
mov ah, 0x09 ; Function 09h Print character string
int 0x21
; Exit
mov ax, 0x4c00
int 0x21
string:
times 255 db 0 ; reserve room for 255 characters
Строка - это всего лишь последовательность символов, поэтому вы можете использовать код int 21 внутри цикла, чтобы получить строку, по одному символу за раз. Создайте метку в сегменте данных, чтобы удерживать строку, и каждый раз, когда вы читаете символ, скопируйте его на эту метку (каждый раз увеличивая смещение, чтобы ваши символы сохранялись последовательно). Стоп цикла, когда определенный символ читается (возможно, входит).
Выполнение всего этого вручную утомительно (подумайте о том, как будет работать backspace), но вы можете это сделать. Кроме того, вы можете связываться с stdio, stdlib и т. Д. И выполнять функции библиотеки вызовов, чтобы выполнять большую часть работы для вас.