在一次选择中选择多个 ID

Posted

技术标签:

【中文标题】在一次选择中选择多个 ID【英文标题】:Selecting Multiple ID's in one Select 【发布时间】:2015-10-27 03:08:59 【问题描述】:

我有一个数据库,其中的条目必须分组在一起

id | Name    | Surname | Time
1  | Michael | Kane    | 3
2  | Torben  | Dane    | 4
3  | Dinge   | Chain   | 5
4  | Django  | Fain    | 5
5  | Juliett | Bravo   | 6
6  | Django  | Fain    | 7
7  | Django  | Fain    | 3
8  | Django  | Fain    | 4
9  | Dinge   | Chain   | 4
10 | Torben  | Dane    | 4

现在我想在维护所有 ID 的同时对项目进行分组。我即将完成以下查询,但我丢失了我的 ID

SELECT id, Name, Surname, sum(Time) from Names group by(Name)

查询的结果是

 id | Name    | Surname | Time 
 9  | Dinge   | Chain   | 9
 8  | Django  | Fain    | 19
 5  | Juliett | Bravo   | 6
 1  | Michael | Kane    | 3
 10 | Torben  | Dane    | 8

虽然我需要这样的所有 id

 ids    | Name    | Surname | Time 
 3,9    | Dinge   | Chain   | 9
 4,6,78 | Django  | Fain    | 19
 5      | Juliett | Bravo   | 6
 1      | Michael | Kane    | 3
 2,10   | Torben  | Dane    | 8

我怎样才能做到这一点?

【问题讨论】:

你打算如何处理“ids”列? 我需要它们,因为我想更新它们。将带有 id 的行标记为已处理,例如 这让我很困惑。如果您以后需要它们进行处理,为什么要这样聚合它们?按“时间”查询行并处理它们。 ? 看来你是想给自己制造更大的麻烦。 ids 不会被立即处理。稍后将决定如何更新带有 id 的行。 【参考方案1】:

你可以使用group_concat()

select group_concat(id, ',') as ids, name, surname, sum(time) as time
from table t
group by name, surname;

只是不要将结果存储回数据库中。逗号分隔值对于返回结果很有用,但在数据库中存储数据的格式是错误的。

【讨论】:

group_concat(id) 就足够了。其余的都是不允许的,但你把我带到了那里,谢谢

以上是关于在一次选择中选择多个 ID的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins一次任务构建中如何处理多个git仓库

REST api:在一次获取中请求多个资源[重复]

CSS--选择器

如何获取表中的所有数据,如果在一列中重复相同的值,该行应该计数一次?

MYSQL 在一列上选择两个值

选择多个项目时的jQuery性能