mysql - 对数据进行分组的 SQL 查询

标签 mysql sql database tsql

有一个要求,我需要在表格中填写一个 group-id 作为 item-idauto-id 的组合.表格如下;

----------------------------------------
Item_id  |  Auto_id  |  Group_id
----------------------------------------
1        |  1        |  1 
1        |  2        |  1
2        |  3        |  3
2        |  4        |  3
3        |  5        |  5
3        |  6        |  5
3        |  7        |  5
4        |  8        |  8
4        |  9        |  8
5        |  10       |  10
6        |  11       |  11

Item_idAuto_id 两列已经填充,我们需要填充group_id。对于每个重复的 item_id,这种关系就像 group_id 将是 auto_id 的最小值。

我希望我说清楚。如果可能请帮忙。

谢谢, 阿希什

最佳答案

您可以使用带有分组依据的子查询,在其中计算每个 item_id 的最小 auto_id。然后你可以将这个子查询与原始表连接起来:

SELECT t1.Item_id, t1.Auto_id, t2.Group_id
FROM
  yourtable t1 INNER JOIN (
    SELECT Item_Id, MIN(Auto_id) Group_id
    FROM yourtable
    GROUP BY Item_Id) t2
  ON t1.Item_Id=t2.ItemId

请参阅 fiddle here .

如果您需要更新现有列,您可以使用此 UPDATE 查询:

UPDATE
  yourtable t1 INNER JOIN (
    SELECT Item_Id, MIN(Auto_id) Group_id
    FROM yourtable
    GROUP BY Item_id) t2
  ON t1.Item_Id=t2.Item_Id
SET
  t1.Group_id=t2.Group_id

fiddle 是 here .

关于mysql - 对数据进行分组的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918694/

相关文章:

mysql - 选择中选择....?

sql - 行号重置

java - 使用多个参数连接两个表的标准

php - 如何在 php mysql 中从一个表调用另一个表的主键

MySQL 带小数点的顺序

MySQL - 检索每个用户每天的最后更新

php - 如何编写mysql脚本来过滤给定日期时间的数据而无需秒?

php - 服务器离线时的 AJAX 请求然后在服务器恢复时恢复

sql - 添加 "trigger"后数据加载

Cassandra 每个节点设置多个磁盘