【发布时间】:2012-07-23 23:24:14
【问题描述】:
Product表:
id: int
name: varchar(255)
info: varchar(8000)
我需要获取所有产品的列表,按名称分组,如果某些产品具有相同的名称,则应选择 info 字段中数据最多的产品来显示。另一个要求是一致性——应该保证每次都展示相同的产品。但性能完全不是我关心的问题。
所以到目前为止我想出的最好的是:
select * from (select * from product order by length(info) desc) as product group by name
我理解这应该在 MySQL 中工作,但不保证结果。
有没有更好的办法?
更新:
我正在寻找的一个例子。如果数据是
1, 'Product1', '12345'
2, 'Product1', '123'
3, 'Product2', '123456'
4, 'Product2', '123456'
5, 'Product2', '12'
预期结果应该是:
1, 'Product1', '12345'
3, 'Product2', '123456'
或
1, 'Product1', '12345'
4, 'Product2', '123456'
我不在乎两者中的哪一个,只要每次运行查询时结果相同即可。
【问题讨论】:
-
一致性是什么意思?您不想在产品表中包含所有内容吗?
-
每次运行查询时获得相同结果的一致性。在我的示例中,MySQL 不保证使用 group by 选择哪个产品,这意味着每次执行查询时结果都可能发生变化。
-
您说的是哪个“产品”,但查询返回的是所有产品。问题是哪个“信息”。一旦你得到最长的,你需要什么一致性?
-
我的意思是基本上返回相同的ID。查询不会返回所有产品 - 如果两个产品具有相同的名称,则只有其中一个会出现在结果中。我会用预期的输出更新问题
标签: mysql sql groupwise-maximum