create database if not exists temp; use temp; -- 2nd highest no item cost -- items with greater than avg of its type drop table if exists cost_items; CREATE TABLE cost_items ( id INT PRIMARY KEY, amount int, item varchar(255) ); insert into cost_items values (1,1,"pencil"), (2,10,"pencil"), (3,20,"pencil"), (4,2,"toaster"), (5,20,"toaster"), (6,30,"toaster"), (7,3,"box"), (8,30,"box"), (9,40,"box"); -- 2nd highest cost for an item select c1.id, c1.item, c1.amount from cost_items as c1 where c1.id = ( select c2.id from cost_items as c2 where c1.item = c2.item order by c2.id limit 1,1 ) ; -- items with greater than avg cost of its type select c1.id, c1.item, c1.amount from cost_items as c1 where c1.amount > ( select avg(amount) from cost_items as c2 where c1.item=c2.item );
Expected output :
+----+---------+--------+ | id | item | amount | +----+---------+--------+ | 2 | pencil | 10 | | 5 | toaster | 20 | | 8 | box | 30 | +----+---------+--------+ 3 rows in set (0.00 sec) +----+---------+--------+ | id | item | amount | +----+---------+--------+ | 3 | pencil | 20 | | 5 | toaster | 20 | | 6 | toaster | 30 | | 8 | box | 30 | | 9 | box | 40 | +----+---------+--------+ 5 rows in set (0.00 sec)