sql - 具有多个列和 LIMIT 2 的 GROUP BY?
问题描述
我的 mysql 数据库中有以下数据结构:
+-------+----------+-------+------------+-------------+-------------+
| Color | brand | size | otherstuff | otherstuff2 | otherstuff3 |
+-------+----------+-------+------------+-------------+-------------+
| red | BMW | small | 0,69 | 0,22 | 0,36 |
| red | BMW | big | 0,48 | 0,00 | 0,13 |
| red | Ford | small | 0,42 | 0,33 | 0,81 |
| red | BMW | big | 0,99 | 0,66 | 0,27 |
| red | Ford | big | 0,30 | 0,44 | 0,23 |
| red | Mercedes | small | 0,87 | 0,23 | 0,80 |
| red | Mercedes | big | 0,51 | 0,06 | 0,46 |
| blue | BMW | small | 0,07 | 0,53 | 0,99 |
| blue | BMW | small | 0,57 | 0,45 | 0,45 |
| blue | BMW | big | 0,14 | 0,23 | 0,37 |
| blue | Ford | big | 0,83 | 0,14 | 0,20 |
| blue | Ford | big | 0,20 | 0,10 | 0,60 |
| blue | Mercedes | small | 0,58 | 0,90 | 0,90 |
| blue | BMW | small | 0,12 | 0,41 | 0,40 |
| blue | Mercedes | big | 0,81 | 0,57 | 0,79 |
| blue | Mercedes | big | 0,95 | 0,36 | 0,70 |
| green | Ford | big | 0,09 | 0,56 | 0,90 |
| green | Ford | small | 0,54 | 0,03 | 0,99 |
| green | Ford | small | 0,86 | 0,58 | 0,12 |
| green | BMW | small | 0,88 | 0,39 | 0,91 |
| green | BMW | small | 0,39 | 0,92 | 0,50 |
| green | BMW | big | 0,11 | 0,62 | 0,23 |
+-------+----------+-------+------------+-------------+-------------+
我想收到每种颜色和每种品牌一个大尺寸和一个小尺寸行 - 像这样:
+-------+----------+-------+------------+-------------+-------------+
| Color | brand | size | otherstuff | otherstuff2 | otherstuff3 |
+-------+----------+-------+------------+-------------+-------------+
| red | BMW | small | 0,69 | 0,22 | 0,36 |
| red | BMW | big | 0,48 | 0,00 | 0,13 |
| red | Ford | small | 0,42 | 0,33 | 0,81 |
| red | Ford | big | 0,30 | 0,44 | 0,23 |
| red | Mercedes | small | 0,87 | 0,23 | 0,80 |
| red | Mercedes | big | 0,51 | 0,06 | 0,46 |
| blue | BMW | small | 0,57 | 0,45 | 0,45 |
| blue | BMW | big | 0,14 | 0,23 | 0,37 |
| blue | Ford | big | 0,20 | 0,10 | 0,60 |
| blue | Mercedes | big | 0,81 | 0,57 | 0,79 |
| blue | Mercedes | small | 0,58 | 0,90 | 0,90 |
| green | Ford | big | 0,09 | 0,56 | 0,90 |
| green | Ford | small | 0,54 | 0,03 | 0,99 |
| green | BMW | small | 0,39 | 0,92 | 0,50 |
| green | BMW | big | 0,11 | 0,62 | 0,23 |
+-------+----------+-------+------------+-------------+-------------+
我的 SQL:
SELECT * FROM `table` GROUP BY color
每种颜色都有一个小品牌和一个大品牌,我的 SQL 看起来像什么?
解决方案
要任意选择每种颜色、品牌和尺寸的一行,请使用ROW_NUMBER
:
SELECT color, brand, size, otherstuff, otherstuff2, otherstuff3
FROM
(
SELECT
t.*,
ROW_NUMBER() OVER (PARTITION BY color, brand, size ORDER BY otherstuff) AS rn
FROM mytable t
) numbered
WHERE rn = 1
ORDER BY color, brand, size;
推荐阅读
- wordpress - WordPress 用户元数据内联显示多个子页面的内容
- reactjs - 无法弄清楚在反应应用程序中在哪里启动 CronJob
- c# - WPF 使用键盘上的箭头键移动图像
- javascript - NPM 包导入如何解决?
- python - 为什么在连接的插槽显示 QMessageBox 时,editingFinished 信号会生成两次?
- python-3.x - 如何使用 Tweepy 指定 Twitter 端点
- xsl-fo - DITA-OT PDF formatter xsl:attribute-set names 文档
- c - (MacOs Catalina 上的 LLDB)Shell 扩展失败
- angular - 有没有办法在 Angular 中装饰以前提供的服务
- python - python输出字符太多