我有table。我想在表中的image列中分配1到24之间的数字。但是,在执行此操作时,我希望company_id以相同的顺序增加。例如,如果表中有2条company_id =100的记录,我希望第一条记录的值为1,第二条记录的值为2。然后,当我切换到company_id=101的记录时,我希望它再次从1开始。我如何为mysql数据库编写此查询?
wmtdaxz31#
试试这个。我创建了这个表:
CREATE TABLE `test_data2` ( `id` bigint unsigned NOT NULL AUTO_INCREMENT, `company_id` int unsigned NOT NULL, `image_path` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, PRIMARY KEY (`id`) );
数据:
id company_id image_path ------ ---------- ------------ 1 100 img_100_a 2 100 img_100_b 3 100 img_100_c 4 100 img_100_d 5 101 img_101_a 6 101 img_101_b
和以下查询:
SELECT id, company_id, image_path, ( CASE company_id WHEN @cur_company_id THEN @curRow := @curRow + 1 ELSE @curRow := 1 AND @cur_company_id := company_id END ) AS company_image_counter FROM test_data2 ORDER BY company_id
给出输出:
id company_id image_path company_image_counter ------ ---------- ---------- ----------------------- 1 100 img_100_a 1 2 100 img_100_b 2 3 100 img_100_c 3 4 100 img_100_d 4 5 101 img_101_a 1 6 101 img_101_b 2
因此,对于公司ID 100,对于4个图像,它给出计数器1到4,对于公司101,对于2个图像,它给出计数器1到2。上面的代码也可以在旧版本的MySQL中运行。如果你有MySQL 8+,它有LAG和LEAD函数。我想看看这些东西是否能帮上忙。更新:是的,@Akina的查询更好:
SELECT id, company_id, image_path, ROW_NUMBER() OVER (PARTITION BY company_id) AS company_image_counter FROM test_data2; id company_id image_path company_image_counter ------ ---------- ---------- ----------------------- 1 100 img_100_a 1 2 100 img_100_b 2 3 100 img_100_c 3 4 100 img_100_d 4 5 101 img_101_a 1 6 101 img_101_b 2
1条答案
按热度按时间wmtdaxz31#
试试这个。我创建了这个表:
数据:
和以下查询:
给出输出:
因此,对于公司ID 100,对于4个图像,它给出计数器1到4,对于公司101,对于2个图像,它给出计数器1到2。
上面的代码也可以在旧版本的MySQL中运行。如果你有MySQL 8+,它有LAG和LEAD函数。我想看看这些东西是否能帮上忙。
更新:是的,@Akina的查询更好: