【发布时间】:2019-03-01 05:05:49
【问题描述】:
我有计算记录的代码,但无法在它之前添加 order by。
连接了两个表,我添加了代码来计算记录。问题是我想先 ORDER BY SN 然后再分配 cnt?
我的代码是:
表格
create table rot (
code int(10) primary key,
PN varchar(10) not null,
SN varchar(10) not null,
LocID int(10) not null);
insert into rot values (1,'T1','T1SN1','1');
insert into rot values (2,'A1','A1SN1','2');
insert into rot values (3,'J1','J1SN1','3');
insert into rot values (4,'A2','A2SN1','1');
insert into rot values (5,'J2','J2SN1','2');
insert into rot values (6,'A3','A3SN1','3');
insert into rot values (7,'J3','J3SN1','4');
insert into rot values (8,'T1','T1SN2','5');
insert into rot values (9,'A1','A1SN2','1');
insert into rot values (10,'J2','J2SN2','3');
insert into rot values (11,'J2','J2SN3','4');
insert into rot values (12,'A1','A1SN3','3');
insert into rot values (13,'J2','J2SN4','5');
create table loc(
code1 int(10) primary key,
LocVar varchar(10) not null);
insert into loc values (1,'AAA');
insert into loc values (2,'BBB');
insert into loc values (3,'CCC');
insert into loc values (4,'DDD');
insert into loc values (5,'EEE');
Cnt代码:
SELECT * FROM rot
JOIN loc ON rot.code = loc.code1
JOIN (
SELECT t1.code, count(*) cnt FROM (
SELECT distinct code
FROM rot ts1
JOIN loc tx1 ON ts1.code = tx1.code1
) t1
JOIN (
SELECT distinct code
FROM rot ts2
JOIN loc tx2 ON ts2.code = tx2.code1
) t2 on t1.code <= t2.code
group by t1.code
) tt ON rot.code = tt.code
结果:
+------+----+-------+-------+-------+--------+------+-----+
| code | PN | SN | LocID | code1 | LocVar | code | cnt |
+------+----+-------+-------+-------+--------+------+-----+
| 2 | A1 | A1SN1 | 2 | 2 | BBB | 2 | 4 |
| 4 | A2 | A2SN1 | 1 | 4 | DDD | 4 | 2 |
| 3 | J1 | J1SN1 | 3 | 3 | CCC | 3 | 3 |
| 5 | J2 | J2SN1 | 2 | 5 | EEE | 5 | 1 |
| 1 | T1 | T1SN1 | 1 | 1 | AAA | 1 | 5 |
+------+----+-------+-------+-------+--------+------+-----+
期望的结果
+------+----+-------+-------+-------+--------+------+-----+
| code | PN | SN | LocID | code1 | LocVar | code | cnt |
+------+----+-------+-------+-------+--------+------+-----+
| 2 | A1 | A1SN1 | 2 | 2 | BBB | 2 | 1 |
| 4 | A2 | A2SN1 | 1 | 4 | DDD | 4 | 2 |
| 3 | J1 | J1SN1 | 3 | 3 | CCC | 3 | 3 |
| 5 | J2 | J2SN1 | 2 | 5 | EEE | 5 | 4 |
| 1 | T1 | T1SN1 | 1 | 1 | AAA | 1 | 5 |
+------+----+-------+-------+-------+--------+------+-----+
我只是想知道在哪里放置 ORDER BY?在我的代码中,我无法分配变量,代码必须以 SELECT 开头。
【问题讨论】:
-
你想要一个序列号,对吧?不算数。除了 cnt 列之外,Results 和 Desired results 之间没有差异。但是行顺序根本没有改变。令人困惑
-
这个计数在这里代表什么?我的意思是你想从你的数据中得到哪些计数?你能把你的问题说得更清楚吗
-
我建议更好地解释您的需求。在 Results 表和您所做的查询的逻辑中,cnt 列保留了一个计数器,用于记录大于或等于代码值的代码数行。换句话说,例如,代码 2 小于或等于 2、3、4 和 5,因此您将 4 存储在 cnt 列上。在 Desired results 中,这已经失去了意义,因为您只将排序的位置保存在 cnt 列中。
-
我同意 D. Smania 的观点。你的计数就是它,它不应该因为排序而改变。否则计数不再匹配对应的 SN。
标签: mysql join select sql-order-by