반응형
MySQL - 선택 시 행 번호 가져오기
항목이 정렬되면 select 문을 실행하고 행 번호를 알 수 있습니까?
제 테이블은 다음과 같습니다.
mysql> describe orders;
+-------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+----------------+
| orderID | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| itemID | bigint(20) unsigned | NO | | NULL | |
+-------------+---------------------+------+-----+---------+----------------+
그러면 다음 쿼리를 실행하여 ID별 주문 수를 확인할 수 있습니다.
SELECT itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID ORDER BY ordercount DESC;
이거 하나 하나 셀게요.itemID
다음과 같이 테이블에 표시됩니다.
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
나도 열 번호를 알고 싶어 그래야 그걸 알 수 있어itemID=388
첫 번째 줄입니다.234
두 번째 등입니다(기본적으로 미가공 카운트뿐만 아니라 주문 순위).결과셋이 돌아오면 자바에서 할 수 있다는 것은 알고 있습니다만, SQL만으로 처리할 수 있는 방법이 없을까 생각하고 있습니다.
갱신하다
순위를 설정하면 결과 세트에 순위가 추가되지만 순서가 올바르지 않습니다.
mysql> SET @rank=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
-> FROM orders
-> GROUP BY itemID ORDER BY rank DESC;
+------+--------+------------+
| rank | itemID | ordercount |
+------+--------+------------+
| 5 | 3459 | 1 |
| 4 | 234 | 2 |
| 3 | 693 | 1 |
| 2 | 3432 | 1 |
| 1 | 388 | 3 |
+------+--------+------------+
5 rows in set (0.00 sec)
이것 좀 봐.
쿼리를 다음으로 변경합니다.
SET @rank=0;
SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;
SELECT @rank;
마지막 선택 항목은 사용자 수입니다.
SELECT @rn:=@rn+1 AS rank, itemID, ordercount
FROM (
SELECT itemID, COUNT(*) AS ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC
) t1, (SELECT @rn:=0) t2;
Swimibebop의 솔루션은 작동하지만 구문을 이용하여 내부 컬럼 이름을 반복하는 것을 피할 수 있습니다.select
보다 심플하고 알기 쉬운 결과를 얻을 수 있습니다.
SELECT @r := @r+1 ,
z.*
FROM(/* your original select statement goes in here */)z,
(SELECT @r:=0)y;
그러면 다음과 같은 이점이 있습니다.
SELECT @r := @r+1 ,
z.*
FROM(
SELECT itemID,
count(*) AS ordercount
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC
)z,
(SELECT @r:=0)y;
MySQL 변수를 사용하여 수행할 수 있습니다.이와 같은 것이 동작합니다(단, 2개의 쿼리로 구성됩니다).
SELECT 0 INTO @x;
SELECT itemID,
COUNT(*) AS ordercount,
(@x:=@x+1) AS rownumber
FROM orders
GROUP BY itemID
ORDER BY ordercount DESC;
현재 MySQL 8.0 및 MariaDB 10.2에 내장되어 있습니다.
SELECT
itemID, COUNT(*) as ordercount,
ROW_NUMBER OVER (PARTITION BY itemID ORDER BY rank DESC) as rank
FROM orders
GROUP BY itemID ORDER BY rank DESC
SELECT RANK() OVER(ORDER BY Employee.ID) rank, forename, surname, Department.Name, Occupation.Name
FROM Employee
JOIN Occupation ON Occupation.ID = Employee.OccupationID
JOIN Department ON Department.ID = Employee.DepartmentID
WHERE DepartmentID = 2;
언급URL : https://stackoverflow.com/questions/2520357/mysql-get-row-number-on-select
반응형
'source' 카테고리의 다른 글
명령줄에서 Eclipse Java 프로젝트 빌드 (0) | 2022.09.16 |
---|---|
구분 기호로 점이 있는 문자열 분할 (0) | 2022.09.16 |
Django와 Python 3에서 사용할 데이터베이스는 무엇입니까? (0) | 2022.09.15 |
MariaDB 복제가 작동하지 않을 수 있음 (0) | 2022.09.15 |
#1064 - SQL 구문에 오류가 있습니다.MariaDB 서버에 대응하는 메뉴얼을 확인해 주세요. (0) | 2022.09.15 |