mysql - SQL选择组查询

标签 mysql sql database

下面是我的表格

表1

+--------+----------+---------+  
| amount | make     | product |  
+--------+----------+---------+  
|    100 | Nokia    | Mobiles |   
|    300 | Samesung | Mobiles |   
|    700 | Micromax | Mobiles |   
|   1000 | Karbonn  | Mobiles |   
|    500 | Lava     | Mobiles |   
|    100 | Floyer   | Gift    |   
|    500 | Arichies | Gift    |   
|    300 | Feeling  | Gift    |   
+--------+----------+---------+  

现在我想显示每个产品的两个最高金额...

所以我想构建单个 SQL 查询,它给我的结果如下..

+--------+----------+---------+  
| amount | make     | product |  
+--------+----------+---------+  
|   1000 | Karbonn  | Mobiles |   
|    700 | Micromax | Mobiles |   
|    500 | Arichies | Gift    |   
|    300 | Feeling  | Gift    |   
+--------+----------+---------+  

请帮助我建立这样的查询..

最佳答案

您可以使用此解决方案根据 amount 检索“分组最大值” :

SELECT a.*
FROM Table1 a
INNER JOIN Table1 b ON a.product = b.product AND a.amount <= b.amount
GROUP BY a.amount, a.product
HAVING COUNT(*) <= 2

只需更改 2无论您要为每个产品检索多少 top 行。

如果您想检索每个产品的最低两行,您可以简单地更改 <=登录 INNER JOIN>= .

您可以在这里摆弄这个解决方案:SQL-Fiddle Demo

关于mysql - SQL选择组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407601/

相关文章:

database - 如何创建我无权访问数据的 Web 应用程序?

java - 无法在数据库中查询特定日期的房间可用性

php - 如何在 Laravel 5.2 中插入数据之前验证(检查)数据表值

mysql - MySQL 5.7 的默认 root 密码是什么

java - 如何将数据库中的数据放入Arraylist中?

database - 地理定位数据库是如何组装的?

mysql - TOP 和 ORDER BY sql 错误

sql - 将多列拆分为多行

MySQL:如何插入多个条目但跳过现有条目?

database - 在数据库中写入 Comments 表