mysql数据库,根据id取每个id相对应钱数第二多的项目?问大神怎么写sql语句,要简单易懂的。谢谢。急

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql数据库,根据id取每个id相对应钱数第二多的项目?问大神怎么写sql语句,要简单易懂的。谢谢。急相关的知识,希望对你有一定的参考价值。

SELECT * from tmp where total in(SELECT max(total) from tmp where total not in(SELECT max(total) from tmp GROUP BY id)GROUP BY id)


这是我建的表tmp,sql是可以取到每个id花钱第二的项目

结果:

看不清图片,sql看不懂的再提问

追问

你确定你可以取到?我把你sql语句的表和字段换成我这边的,还是多条啊

追答

你把你结果发给我看看

追问

追答

不太可能呀,我刚在我那张表又加了几条数据都可以的呀

有些怀疑你执行SQL只选择部分执行而已

不然我把我的表导给你?

好吧,我发现bug了,不好意思

追问

大神,搞定了吗?

追答

搞不定呀,我再试试

SELECT * from (SELECT * from tmp where i not in (select a.i from tmp as a where total = (select max(total) from tmp where a.id=id))
) as t where total=(SELECT max(total) from (SELECT * from tmp where i not in (select a.i from tmp as a where total = (select max(total) from tmp where a.id=id))
) as y where t.id=y.id)

我这i是表key来的

这可以的你看看能不能简化咯

DROP TABLE IF EXISTS `tmp`;CREATE TABLE `tmp` ( `i` int(3) NOT NULL AUTO_INCREMENT, `id` int(3) DEFAULT NULL, `typeid` varchar(3) DEFAULT NULL, `typename` varchar(20) DEFAULT NULL, `total` int(11) DEFAULT NULL, PRIMARY KEY (`i`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;-- ------------------------------ Records of tmp-- ----------------------------INSERT INTO `tmp` VALUES ('1', '343', '08', '家用电器', '20540');INSERT INTO `tmp` VALUES ('2', '343', '06', '服装', '10920');INSERT INTO `tmp` VALUES ('3', '343', '07', '金属', '2250');INSERT INTO `tmp` VALUES ('4', '344', '08', '家用电器', '7680');INSERT INTO `tmp` VALUES ('5', '344', '07', '金属', '3200');INSERT INTO `tmp` VALUES ('6', '344', '06', '服装', '200');INSERT INTO `tmp` VALUES ('7', '343', '05', '生活日常', '12346');INSERT INTO `tmp` VALUES ('8', '343', '09', '餐饮', '1290');INSERT INTO `tmp` VALUES ('9', '344', '09', '餐饮', '12346');INSERT INTO `tmp` VALUES ('10', '344', '05', '生活日常', '7680');

这是表结构和数据

收到请回应一下

参考技术A select cgrant_id,sum(totalExpense) as total from table group by cgrant_id
图片看不太清楚,字段名和数据表名,你自己再做相应改变追问

不是根据每个id进行分组,你理解错误

如何用SQL SERVER取分组数据第一条

参考技术A

根据table1_id进行分组所得结果:

select * from (select a.id as a_id,a.name,a.time,a.content,b.id as b_id,b.user from table1 a inner join table2 b on a.id = b.table1_ID) new_tbl where b_id in (select min(id) from table2 group by table1_ID)

扩展资料:

注意事项

在SQL Server数据库中,使用top关键字:SELECT TOP number|percent column_name(s) FROM table_name

在MySQL数据库中,使用LIMIT关键字:SELECT column_name(s) FROM table_name LIMIT number

例子:SELECT * FROM Persons LIMIT 1 

select   bookName   from   book   where   price   >   20   limit   1; 

limit   1;
or
limit   0,1;

在Oracle数据库中,使用ROWNUM关键字:

SELECT column_name(s) FROM table_name WHERE ROWNUM <= number

例子:SELECT * FROM Persons WHERE ROWNUM <= 1

以上是关于mysql数据库,根据id取每个id相对应钱数第二多的项目?问大神怎么写sql语句,要简单易懂的。谢谢。急的主要内容,如果未能解决你的问题,请参考以下文章

java 怎样查询MYSQL数据库中的数据;根据id字段查询,获取id 对应的一行数据,并显示 在标签上。

两个mysql数据表中的字段相对应,如何调出

mysql 连接查询时如何从第二章表中根据不同条件获取不同字段

MySQL group by后取每个分组中最新一条数据

如何将两个表与对应相同id号的相同行数合并在一起?

mysql通过group by分组取最大时间对应的数据,提供两种有效方法。