<分区>
我想找到年龄大于某年所有值的 n% 的名称。 这是表格:
mysql> select * from cust;
+------+------+------+
| name | age | year |
+------+------+------+
| toni | 21 | 2016 |
| robi | 22 | 2016 |
| deni | 23 | 2016 |
| jeki | 24 | 2016 |
| yodi | 25 | 2016 |
| rino | 26 | 2016 |
| goli | 27 | 2016 |
| tobi | 28 | 2016 |
| lemi | 29 | 2016 |
| lora | 30 | 2016 |
| riko | 25 | 2017 |
| soni | 26 | 2017 |
| bino | 27 | 2017 |
| kola | 28 | 2017 |
| zoki | 29 | 2017 |
| mera | 30 | 2017 |
| noki | 31 | 2017 |
| peni | 32 | 2017 |
| vino | 33 | 2017 |
| heri | 34 | 2017 |
+------+------+------+
数据链接:
create table tbl ( name varchar(10), age int, year int);
insert into tbl values
('toni', 21, 2016 ),
('robi', 22, 2016 ),
('deni', 23, 2016 ),
('jeki', 24, 2016 ),
('yodi', 25, 2016 ),
('rino', 26, 2016 ),
('goli', 27, 2016 ),
('tobi', 28, 2016 ),
('lemi', 29, 2016 ),
('lora', 30, 2016 ),
('riko', 25, 2017 ),
('soni', 26, 2017 ),
('bino', 27, 2017 ),
('kola', 28, 2017 ),
('zoki', 29, 2017 ),
('mera', 30, 2017 ),
('noki', 31, 2017 ),
('peni', 32, 2017 ),
('vino', 33, 2017 ),
('heri', 34, 2017 );
我想从 2017 年找到年龄大于 2016 年所有年龄的 60% 的名字。我做了这样的事情
select name from cust where year=2017 and age>
(SELECT age
FROM (
SELECT cust.*, @counter := @counter +1 AS counter
FROM (select @counter:=0) AS initvar, cust where year=2016
ORDER BY age DESC
) AS X
where counter <= (60/100 * @counter)
ORDER BY age DESC);
我知道这是错误的,但你知道我的意思是比较主查询之间的值 和子查询,但我希望子查询超过 1 行。 是否有有效但与上述类似的解决方案?
编辑:这是我想要的输出:
+------+
| name |
+------+
| soni |
| bino |
| kola |
| zoki |
| mera |
| noki |
| peni |
| vino |
| heri |
+------+