小白求大佬帮我看下这条 sql 怎么写

2019-02-16 18:48:44 +08:00
 qwa123

https://wx3.sinaimg.cn/mw690/007z9MX7ly1g08gglduv5j30mc0oc76d.jpg

2669 次点击
所在节点    程序员
15 条回复
qwa123
2019-02-16 19:05:32 +08:00
有人吗...
yuankui
2019-02-16 19:29:51 +08:00
group by + group_concat.

兄弟,听我一句劝,伸手党在 V2EX 是混不下去的,好好打一下基础,提一点对大家有价值的问题。
keyfunc
2019-02-16 20:12:18 +08:00
作业自己做系列
azh7138m
2019-02-16 20:26:29 +08:00
楼主微博名字好评
2L 正解
Cbdy
2019-02-16 20:29:14 +08:00
MySQL 不要用驼峰
GuangXiN
2019-02-16 20:30:59 +08:00
用驼峰也没啥问题
Cbdy
2019-02-16 20:42:41 +08:00
newlife
2019-02-16 23:48:58 +08:00
select "batchId",
case when type::integer=1 then array_agg("bizId") else null end as "uid" ,
case when type::integer=2 then array_agg("bizId") else null end as "fid"
from V2EX group by "batchId",type;

result:

"batchId","uid","fid"
"1", "['uid1', 'uid2']",NULL
"3", NULL, "['fid3']"
"1", NULL, "['fid1', 'fid2']"
"2", "['uid3']", NULL

这个和楼主的要求还不符,求解答,,,如何合并第一和第三项?我用的 postgre
easylee
2019-02-17 00:00:15 +08:00
@yuankui 楼主发帖态度挺诚恳的,应该是实在不会才发帖询问的。

好好的论坛,大家为何不对新手友善点。
newlife
2019-02-17 00:31:43 +08:00
select "batchId",
array_remove(array_agg(case when type::integer=1 then "bizId" end ),NULL)as "uid" ,
array_remove(array_agg(case when type::integer=2 then "bizId" end),NULL )as "fid"
from V2EX group by "batchId";

result:

"3" "{}" "{fid3}"
"2" "{uid3}" "{}"
"1" "{uid1,uid2}" "{fid1,fid2}"

这次对了,还有别的写法么?
GuangXiN
2019-02-17 16:33:59 +08:00
@Cbdy 你贴第一个是给 MySQL 写 test cases 的时候需遵循的规范,第二个是该 blog 作者所在团队的规范。自己开发使用 MySQL 的时候,遵守自己团队规范即可,MySQL 本身可以支持驼峰命名的表名和字段名,innodb 存储引擎也不会把表名当文件名保存,不会触发大小写敏感的问题。
Cbdy
2019-02-17 16:47:29 +08:00
@GuangXiN
这不是技术上的,这是规约上的。在实践中,MySQL 甚至可以用中文作为列名——但很少有人这么做
我问过很多 DBA,他们建议不要使用驼峰。出于“最小惊讶原则”,选用主流的规约是好的。所以我给出这个建议
chenqh
2019-02-17 18:38:57 +08:00
工作几年 sql 只会简单的 sql 了
GuangXiN
2019-02-17 19:59:43 +08:00
@Cbdy 这个看你们怎么用 MySQL,我厂有几个库是给产品和运营用的,里面有大量中文字段名的表和视图
pupilGradeSix
2019-02-18 00:28:51 +08:00
可能对于专业的来说太简单了,但我作为一个前端,你这个 sql 着实让我感兴趣了啊。研究了好一会
```
SELECT batchId,
group_concat( CASE WHEN type = 1 THEN
bizId ELSE null END) as "uid",
group_concat( CASE WHEN type = 2 THEN
bizId ELSE null END) as "typeid"
FROM test
GROUP BY batchId;

```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/535679

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX