[SQL] MySQL은 - 선택에 행 번호를 가져옵니다
SQLMySQL은 - 선택에 행 번호를 가져옵니다
나는 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;
이것은 나에게이 같은 테이블의 각 항목 ID의 수를 제공합니다 :
+--------+------------+
| itemID | ordercount |
+--------+------------+
| 388 | 3 |
| 234 | 2 |
| 3432 | 1 |
| 693 | 1 |
| 3459 | 1 |
+--------+------------+
나는, (234)이 두 번째, 항목 ID = 388은 최초의 행 있다는 등을 말할 수 있도록 (본질적으로, 주문의 단지 원시 카운트를 순위)뿐만 아니라, 행 번호를 얻으려면. 나는 결과 세트 등을받을 때 자바에서이 작업을 수행 할 수 있습니다 알고 있지만 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)
해결법
-
==============================
1.이것 좀 봐.
이것 좀 봐.
귀하의 질의에 변경 :
SET @rank=0; SELECT @rank:=@rank+1 AS rank, itemID, COUNT(*) as ordercount FROM orders GROUP BY itemID ORDER BY ordercount DESC; SELECT @rank;
마지막 선택은 당신의 수입니다.
-
==============================
2.
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;
-
==============================
3.Swamibebop의 솔루션은 작동하지만 테이블을 활용하여 * 구문, 우리는 내부 선택의 열 이름을 반복하지 않도록하고 간단한 / 짧은 결과를 얻을 수 있습니다. :
Swamibebop의 솔루션은 작동하지만 테이블을 활용하여 * 구문, 우리는 내부 선택의 열 이름을 반복하지 않도록하고 간단한 / 짧은 결과를 얻을 수 있습니다. :
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;
-
==============================
4.당신은 그것을 할 MySQL의 변수를 사용할 수 있습니다. 이 같은 뭔가 (하지만,이 두 개의 질의로 구성) 작동합니다.
당신은 그것을 할 MySQL의 변수를 사용할 수 있습니다. 이 같은 뭔가 (하지만,이 두 개의 질의로 구성) 작동합니다.
SELECT 0 INTO @x; SELECT itemID, COUNT(*) AS ordercount, (@x:=@x+1) AS rownumber FROM orders GROUP BY itemID ORDER BY ordercount DESC;
-
==============================
5.그것은 지금의 MySQL 8.0과 MariaDB 10.2에 내장 것 :
그것은 지금의 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
from https://stackoverflow.com/questions/2520357/mysql-get-row-number-on-select by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 단일 SQL 쿼리에서 여러 행을 삽입? [복제] (0) | 2020.03.08 |
---|---|
[SQL] SQL 논리 연산자 우선 순위 : AND와 OR (0) | 2020.03.08 |
[SQL] MySQL은 실행중인 총을 계산 (0) | 2020.03.08 |
[SQL] 두 날짜 사이의 날짜의 목록을 가져옵니다 (0) | 2020.03.08 |
[SQL] 쉼표에서 MySQL의 쿼리 찾는 값은 문자열을 분리 (0) | 2020.03.08 |