SQL 문구를 사용하여 연례 추첨 프로그램의 코드를 실현하다
📝본고에서 사용한 예시표다운로드 가능.
Oracle
Oracle은 무작위 숫자와 무작위 문자열 등을 포함하여 무작위 데이터를 생성하는 데 사용할 수 있는 시스템 패키지DBMS_RANDOM를 제공합니다.여기서 DBMS_RANDOM.VALUE 함수는 0보다 작은 수의 무작위 숫자를 생성하는 데 사용할 수 있습니다.이 함수를 이용하여 우리는 표에서 무작위 데이터 줄을 되돌릴 수 있다.예:
SELECT emp_id, emp_name
FROM employee
ORDER BY dbms_random.value
FETCH FIRST 1 ROWS ONLY;
EMP_ID|EMP_NAME|
------|--------|
3| |
이상의 조회를 다시 실행하면 다른 직원으로 돌아갑니다.또한 여러 명의 랜덤 직원을 한 번에 복귀할 수 있습니다.
SELECT emp_id, emp_name
FROM employee
ORDER BY dbms_random.value
FETCH FIRST 3 ROWS ONLY;
EMP_ID|EMP_NAME|
------|--------|
6| |
21| |
9| |
같은 직원이 여러 번 당첨되지 않도록 당첨된 직원의 표를 저장할 수 있습니다.매번 상을 받을 때마다
--
CREATE TABLE emp_win(
emp_id integer PRIMARY KEY, --
emp_name varchar(50) NOT NULL, --
grade varchar(50) NOT NULL --
);
당첨된 직원과 레벨을emp_win표에서 매번 당첨될 때마다 이미 당첨된 직원을 배제합니다.예를 들어 다음 문장은 3등상 3명을 뽑을 수 있다.
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY dbms_random.value
FETCH FIRST 3 ROWS ONLY;
SELECT * FROM emp_win;
EMP_ID|EMP_NAME|GRADE |
------|--------|--------|
8| | |
3| | |
9| | |
계속해서 2등상 2명과 1등 1명을 뽑겠습니다.
-- 2
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY dbms_random.value
FETCH FIRST 2 ROWS ONLY;
-- 1
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY dbms_random.value
FETCH FIRST 1 ROWS ONLY;
SELECT * FROM emp_win;
EMP_ID|EMP_NAME|GRADE |
------|--------|-------|
8| | |
3| | |
9| | |
6| | |
22| | |
10| | |
우리는 상기 문장을 하나의 저장 프로세스로 봉인할 수 있다.
CREATE OR REPLACE PROCEDURE luck_draw(pv_grade varchar, pn_num integer)
IS
BEGIN
INSERT INTO emp_win
SELECT emp_id, emp_name, pv_grade
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY dbms_random.value
FETCH FIRST pn_num ROWS ONLY;
COMMIT;
END luck_draw;
/
CALL luck_draw(' ', 1);
SELECT * FROM emp_win WHERE grade = ' ';
EMP_ID|EMP_NAME|GRADE |
------|--------|-------|
25| | |
Oracle에서 무작위 숫자, 문자열, 날짜, 유효성 검사 코드 및 UUID를 생성하는 방법에 대한 정보이 문장을 참고하다.MySQL
MySQL은 0보다 작은 무작위 숫자를 생성하는 데 사용할 수 있는 시스템 함수RAND를 제공합니다.이 함수를 이용하여 우리는 표에서 무작위 기록을 되돌릴 수 있다.예:
SELECT emp_id, emp_name
FROM employee
ORDER BY RAND()
LIMIT 1;
emp_id|emp_name|
------|--------|
19| |
상기 문장을 다시 실행하면 다른 직원으로 돌아갈 것입니다.우리도 한 번에 여러 명의 무작위 직원을 되돌릴 수 있다.
SELECT emp_id, emp_name
FROM employee
ORDER BY RAND()
LIMIT 3;
emp_id|emp_name|
------|--------|
1| |
20| |
23| |
같은 직원이 여러 번 당첨되지 않도록 당첨된 직원의 표를 저장할 수 있습니다.
--
CREATE TABLE emp_win(
emp_id integer PRIMARY KEY, --
emp_name varchar(50) NOT NULL, --
grade varchar(50) NOT NULL --
);
매번 당첨된 직원과 레벨을 emp_win표에서 매번 당첨될 때마다 이미 당첨된 직원을 배제합니다.예를 들어 다음 문장은 3등상 3명을 뽑을 수 있다.
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY RAND()
LIMIT 3;
SELECT * FROM emp_win;
emp_id|emp_name|grade |
------|--------|-------|
18| | |
23| | |
24| | |
우리는 계속해서 2등상 2명과 일등상 1명을 뽑았다.
-- 2
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY RAND()
LIMIT 2;
-- 1
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY RAND()
LIMIT 1;
SELECT * FROM emp_win;
emp_id|emp_name|grade |
------|--------|-------|
2| | |
18| | |
20| | |
23| | |
24| | |
25| | |
우리는 상기 문장을 하나의 저장 프로세스로 봉인할 수 있다.
DELIMITER $$
CREATE PROCEDURE luck_draw(IN pv_grade varchar(50), IN pn_num integer)
BEGIN
INSERT INTO emp_win
SELECT emp_id, emp_name, pv_grade
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RAND()
LIMIT pn_num;
SELECT * FROM emp_win;
END$$
DELIMITER ;
CALL luck_draw(' ', 1);
emp_id|emp_name|grade |
------|--------|-------|
2| | |
8| | |
18| | |
20| | |
23| | |
24| | |
25| | |
ySQL에서 임의 숫자, 문자열, 날짜, 유효성 검사 코드 및 UUID를 생성하는 방법에 대한 정보이 문장을 참고하다.Microsoft SQL Server
Microsoft SQL Server는 무작위 GUID를 생성하는 데 사용할 수 있는 시스템 함수NEWID를 제공합니다.이 함수를 이용하여 우리는 표에서 무작위 데이터 줄을 되돌릴 수 있다.예:
SELECT TOP(1) emp_id, emp_name
FROM employee
ORDER BY NEWID();
emp_id|emp_name|
------|--------|
25| |
상기 문장을 다시 실행하면 다른 직원으로 돌아갈 것입니다.또한 여러 명의 랜덤 직원을 한 번에 복귀할 수 있습니다.
SELECT TOP(3) emp_id, emp_name
FROM employee
ORDER BY NEWID();
emp_id|emp_name|
------|--------|
23| |
1| |
21| |
Microsoft SQL Server는 임의의 숫자를 되돌려주는 RAND 함수를 제공하지만, 이 함수는 모든 데이터 줄에 대해 같은 결과를 되돌려주기 때문에 테이블의 임의 기록에 사용할 수 없습니다.예:
SELECT TOP(3) emp_id, emp_name, RAND() AS rd
FROM employee
ORDER BY RAND();
emp_id|emp_name|rd |
------|--------|------------------|
23| |0.8623555267583647|
18| |0.8623555267583647|
11| |0.8623555267583647|
같은 직원이 여러 번 당첨되지 않도록 당첨된 직원의 표를 저장할 수 있습니다.
--
CREATE TABLE emp_win(
emp_id integer PRIMARY KEY, --
emp_name varchar(50) NOT NULL, --
grade varchar(50) NOT NULL --
);
우리는 매번 당첨 직원과 등급을 emp_에 저장합니다win표에서 매번 당첨될 때마다 이미 당첨된 직원을 배제합니다.예를 들어 다음 문장은 3등상 3명을 뽑을 수 있다.
INSERT INTO emp_win
SELECT TOP(3) emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY NEWID();
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
14| | |
17| | |
21| | |
계속해서 2등상 2명과 1등 1명을 뽑겠습니다.
-- 2
INSERT INTO emp_win
SELECT TOP(2) emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY NEWID();
-- 1
INSERT INTO emp_win
SELECT TOP(1) emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY NEWID();
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
14| | |
15| | |
17| | |
18| | |
21| | |
22| | |
우리는 상기 문장을 하나의 저장 프로세스로 봉인할 수 있다.
CREATE OR ALTER PROCEDURE luck_draw(@pv_grade VARCHAR(50), @pn_num integer)
AS
BEGIN
INSERT INTO emp_win
SELECT TOP(@pn_num) emp_id, emp_name, @pv_grade
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY NEWID()
SELECT * FROM emp_win
END;
EXEC luck_draw ' ', 1;
emp_id|emp_name|grade|
------|--------|-----|
14| | |
15| | |
17| | |
18| | |
21| | |
22| | |
23| | |
icrosoft SQL Server에서 무작위 숫자, 문자열, 날짜, 유효성 검사 코드 및 UUID를 생성하는 방법에 대해서는 이 문장 을 참조하십시오.PostgreSQL
PostgreSQL은 0보다 작은 무작위 숫자를 생성하는 데 사용할 수 있는 시스템 함수RANDOM를 제공합니다.이 함수를 이용하여 우리는 표에서 무작위 기록을 되돌릴 수 있다.예:
SELECT emp_id, emp_name
FROM employee
ORDER BY RANDOM()
LIMIT 1;
emp_id|emp_name|
------|--------|
22| |
상기 문장을 다시 실행하면 다른 직원으로 돌아갈 것입니다.우리도 한 번에 여러 명의 무작위 직원을 되돌릴 수 있다.
SELECT emp_id, emp_name
FROM employee
ORDER BY RAND()
LIMIT 3;
emp_id|emp_name|
------|--------|
8| |
4| |
9| |
같은 직원이 여러 번 당첨되지 않도록 당첨된 직원의 표를 저장할 수 있습니다.
--
CREATE TABLE emp_win(
emp_id integer PRIMARY KEY, --
emp_name varchar(50) NOT NULL, --
grade varchar(50) NOT NULL --
);
매번 당첨된 직원과 레벨을 emp_win표에서 매번 당첨될 때마다 이미 당첨된 직원을 배제합니다.예를 들어 다음 문장은 3등상 3명을 뽑을 수 있다.
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY RANDOM()
LIMIT 3;
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
23| | |
15| | |
24| | |
우리는 계속해서 2등상 2명과 일등상 1명을 뽑았다.
-- 2
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RANDOM()
LIMIT 2;
-- 1
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RANDOM()
LIMIT 1;
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
23| | |
15| | |
24| | |
1| | |
21| | |
22| | |
우리는 상기 문장을 하나의 저장 프로세스로 봉인할 수 있다.
CREATE OR REPLACE PROCEDURE luck_draw(pv_grade IN VARCHAR, pn_num IN INTEGER)
LANGUAGE plpgsql
AS $$
BEGIN
INSERT INTO emp_win
SELECT emp_id, emp_name, pv_grade
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RANDOM()
LIMIT pn_num;
END;
$$
CALL luck_draw(' ', 1);
SELECT * FROM emp_win WHERE grade = ' ';
emp_id|emp_name|grade|
------|--------|-----|
5| | |
PostgreSQL에서 무작위 숫자, 문자열, 날짜, 인증 코드 및 UUID를 생성하는 방법에 관하여이 문장을 참고하다SQLite
SQLite의 RANDOM 함수는 9223372036854775808보다 작은 9223372036854775807의 무작위 정수를 생성하는 데 사용할 수 있다.이 함수를 이용하여 우리는 표에서 무작위 데이터 줄을 되돌릴 수 있다.예:
SELECT emp_id, emp_name
FROM employee
ORDER BY RANDOM()
LIMIT 1;
emp_id|emp_name|
------|--------|
4| |
상기 문장을 다시 실행하면 다른 직원으로 돌아갈 것입니다.또한 여러 명의 랜덤 직원을 한 번에 복귀할 수 있습니다.
SELECT emp_id, emp_name
FROM employee
ORDER BY RANDOM()
LIMIT 3;
emp_id|emp_name|
------|--------|
16| |
15| |
11| |
같은 직원이 여러 번 당첨되지 않도록 당첨된 직원의 표를 저장할 수 있습니다.
--
CREATE TABLE emp_win(
emp_id integer PRIMARY KEY, --
emp_name varchar(50) NOT NULL, --
grade varchar(50) NOT NULL --
);
우리는 매번 당첨 직원과 등급을 emp_에 저장합니다win표에서 매번 당첨될 때마다 이미 당첨된 직원을 배제합니다.예를 들어 다음 문장은 3등상 3명을 뽑을 수 있다.
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win) --
ORDER BY RANDOM()
LIMIT 3;
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
2| | |
3| | |
8| | |
계속해서 2등상 2명과 1등 1명을 뽑겠습니다.
-- 2
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RANDOM()
LIMIT 2;
-- 1
INSERT INTO emp_win
SELECT emp_id, emp_name, ' '
FROM employee
WHERE emp_id NOT IN (SELECT emp_id FROM emp_win)
ORDER BY RANDOM()
LIMIT 1;
SELECT * FROM emp_win;
emp_id|emp_name|grade|
------|--------|-----|
2| | |
3| | |
4| | |
8| | |
16| | |
23| | |
SQLite에서 무작위 숫자, 문자열, 날짜, 유효성 검사 코드 및 UUID를 생성하는 방법에 대한 정보이 문장을 참고하다.총결산
우리는 데이터베이스 시스템이 제공한 랜덤수 함수를 통해 표의 랜덤 기록을 되돌려 연간 추첨 기능을 실현한다.
SQL 문구를 사용하여 연례 추첨 프로그램을 실현하는 것에 관한 이 글은 여기에 소개되었습니다. 더 많은 관련 sql 연례 추첨 프로그램의 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
깊이 중첩된 객체를 정확히 일치 검색 - PostgreSQL목차 * 🚀 * 🎯 * 🏁 * 🙏 JSON 객체 예시 따라서 우리의 현재 목표는 "고용주"사용자가 입력한 검색어(이 경우에는 '요리')를 얻고 이 용어와 정확히 일치하는 모든 사용자 프로필을 찾는 것입니다. 즐거운 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.