利用MySQL的关系功能并规范化数据,而不是将数字存储在分隔的字符串中:将数字(key, value)成对存储在一个单独的表中,该表将外键(即现有表的外键)与列表中的单个数字相关联.如果订单很重要,请添加一个附加列以指示编号在列表中的位置.
CREATE TABLE `newtable` (
`key` INT,
`value` INT,
FOREIGN KEY (`key`) REFERENCES `existingtable` (`key`)
)
Run Code Online (Sandbox Code Playgroud)
然后,你只需要加入表一起,GROUP BY在现有的表中的键和ORDER BY的AVG()或SUM()在新表中的值; 你甚至可以使用MySQL的GROUP_CONCAT()函数回收逗号分隔列表:
SELECT `existingtable`.*, GROUP_CONCAT(`newtable`.`value`) AS `values`
FROM `existingtable` LEFT JOIN `newtable` USING (`key`)
GROUP BY `key`
ORDER BY AVG(`newtable`.`value`) -- or use SUM() if preferred
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |