首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL分组查询

MySQL分组查询
EN

Stack Overflow用户
提问于 2015-12-19 21:49:03
回答 2查看 37关注 0票数 1

我的数据库里有很多表。

表: ObjectToPerson

例如,如果我在数据库中有以下几个条目:

代码语言:javascript
复制
+----+------------+------------+----------+----------+--------------+
| Id | WeekNumber |    Date    | PersonId | ObjectId | ObjectTypeId |
+----+------------+------------+----------+----------+--------------+
|  1 |          1 | 2015-11-04 |        1 |        1 |            1 |
|  2 |          1 | 2015-11-04 |        1 |        3 |            2 |
|  3 |          1 | 2015-11-04 |        2 |        2 |            1 |
|  4 |          1 | 2015-11-04 |        2 |        4 |            2 |
+----+------------+------------+----------+----------+--------------+

我想将结果返回如下两行:

代码语言:javascript
复制
+------+------------+----------+----------------------------+----------------------------+
| Week |    Date    | PersonId | ObjectId(ObjectTypeId = 1) | ObjectId(ObjectTypeId = 2) |
+------+------------+----------+----------------------------+----------------------------+
|    1 | 2015-11-04 |        1 |                          1 |                          3 |
|    1 | 2015-11-04 |        2 |                          2 |                          4 |
+------+------------+----------+----------------------------+----------------------------+

我正在考虑某种按查询分组的方法,但我似乎无法正确地理解它。

代码语言:javascript
复制
Select * From ObjectToPerson
Left Join Objects O On O.Id = ObjectToPerson.ObjectId And ObjectToPerson.ObjectTypeId = 1
Left Join Objects O On O.Id = ObjectToPerson.ObjectId And ObjectToPerson.ObjectTypeId = 2

有人能解释一下我是怎么做到的吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-19 21:58:49

如果列的类型是正确的,可以用CASE只选择ObjectId,然后使用MAX/GROUP将结果分组为每个人/周/日期一个行。

代码语言:javascript
复制
SELECT WeekNumber week, date, personid, 
  MAX(CASE WHEN ObjectTypeId=1 THEN ObjectId END) Type1,
  MAX(CASE WHEN ObjectTypeId=2 THEN ObjectId END) Type2
  FROM ObjectToPerson
  GROUP BY week, date, personid

一个需要测试的SQLfiddle。

票数 2
EN

Stack Overflow用户

发布于 2015-12-19 21:57:44

您不需要两个联接,您需要一个WHERE子句;

代码语言:javascript
复制
SELECT * FROM ObjectToPerson
LEFT JOIN Objects O ON O.Id = ObjectToPerson.ObjectId
WHERE ObjectToPerson.ObjectTypeId IN(1,2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34375746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档