gpt4 book ai didi

Mysql按组处理数据

转载 作者:可可西里 更新时间:2023-11-01 08:06:50 25 4
gpt4 key购买 nike

我有几组数据。每个组都有一些 property 字段。例如:

_________________________
| id | value | property |
--------------------------
| 1 | 2 | 3 |
--------------------------
| 2 | 2 | 3 |
--------------------------
| 3 | 2 | 3 |
--------------------------
| 4 | 2 | 4 |
-------------------------
| 5 | 2 | 4 |
--------------------------
| 6 | 2 | 4 |
--------------------------

如何使用 property = 3 更新按 id ASC 排序的两个字符串,以及使用 id ASC 排序的 2 个字符串property = 4 通过一次查询?

我想用 property = 3 更新 3 行中的 2 行,并用 property = 4 更新 3 行中的 2 行。例如:id 为 1 和 2 的行,以及 id 为 4 和 5 的行
即我想通过一个查询

更新具有不同条件的数据组

最佳答案

您可以使用计算排名字段来做到这一点,例如-

SELECT p1.*, COUNT(*) rank FROM properties p1
LEFT JOIN properties p2
ON p2.property = p1.property AND p2.id <= p1.id
GROUP BY p1.property, p1.id

此查询将按属性返回具有行号的数据集:

+------+-------+----------+------+
| id | value | property | rank |
+------+-------+----------+------+
| 1 | 2 | 3 | 1 |
| 2 | 2 | 3 | 2 |
| 3 | 2 | 3 | 3 |
| 4 | 2 | 4 | 1 |
| 5 | 2 | 4 | 2 |
| 6 | 2 | 4 | 3 |
+------+-------+----------+------+

那么你应该更新排名 < 3 的记录:

UPDATE properties p
JOIN (SELECT p1.*, COUNT(*) rank FROM properties p1
LEFT JOIN properties p2
ON p2.property = p1.property AND p2.id <= p1.id
GROUP BY p1.property, p1.id) r
ON p.id = r.id
SET p.value = 100 -- set new value here
WHERE r.rank < 3

关于Mysql按组处理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com