我显然误解了MySQL的GROUP BY,因为它改变了我的结果顺序。
使用以下示例SQL数据:
\b
现在,我以创建此数据为例,因此 GROUP_NAME 列中会有很多不同的值。但是,为了聪明起见,我只包含了演示此问题的内容。
运行此非常简单的查询,按预期方式在顶部返回最高的 ORDER_COLUMN (ID:3)
CREATE TABLE IF NOT EXISTS `example_table` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`GROUP_NAME` text NOT NULL,
`ORDER_COLUMN` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
INSERT INTO `example_table` (`ID`, `GROUP_NAME`, `ORDER_COLUMN`) VALUES
(NULL, '271007K240.003:10', 70),
(NULL, '271007K240.003:10', 90),
(NULL, '271007K240.003:10', 100),
(NULL, '271007K240.003:10', 50),
(NULL, '271007K240.003:10', 80),
(NULL, '271007K240.003:10', 60);
但是我实际上想按我在这里命名的列 GROUP_NAME 进行分组,因此我想做这样的事情:
SELECT
*
FROM
`example_table`
ORDER BY
ORDER_COLUMN
DESC
现在执行此操作仅返回第一行,而忽略ORDER BY。
然后我想实现我所需要的,我将需要使用对数据进行预排序的子查询,然后group by可以像这样对子查询数据集进行分组:
SELECT
*
FROM
`example_table`
GROUP BY
GROUP_NAME
ORDER BY
ORDER_COLUMN
DESC
但是,不幸的是,它仍然仅返回表的第一行。我在这里做什么错了?
答案 0 :(得分:1)
使用此查询:
select group_name, max(order_column) order_column
from example_table
group by group_name
您可以获得每个order_column
的最大值id
。
然后将其加入表格:
select t.*
from example_table t inner join (
select group_name, max(order_column) order_column
from example_table
group by group_name
) g on g.group_name = t.group_name and g.order_column = t.order_column
请参见demo。
结果:
| ID | GROUP_NAME | ORDER_COLUMN |
| --- | ----------------- | ------------ |
| 3 | 271007K240.003:10 | 100 |
答案 1 :(得分:0)
不确定要完成什么,但是您尝试过:
ORDER BY
GROUP_NAME,
ORDER_COLUMN
如果这不能解决问题,如何添加具有不同组名的更多数据以及如何显示输出示例