这个 SQL 应该怎么写?认真

2023-07-22 19:27:41 +08:00
 leixx
现在的版本是这样的:
名称 | 明细 | 价格
K8s | ACK | 30

现在产品想变成这个样子:
名称 | 明细| 地域 | 价格| 共有条目数
K8s | ACK | 杭州,南京 | 30 | 2

具体的数据大概是这样的:
名称 | 明细 | 地域 | 价格
K8s | ACK | 杭州| 10
K8s | ACK | 南京| 20


最好是能通过 sql 写出来,因为数据量很大。
1. 这里如何能把两个地域用 sql 写出来呢?
2. 条目数怎么计算?
3. 这只是一个产品,如果产品很多怎么办? 如何能把下面的数据,统计出来呢?
期望结果是这样的比如:
名称 | 明细 | 地域 | 价格 |共有条目数
K8s | ACK | 杭州,南京 | 30 | 2
服务器 | ECS | 杭州,上海,南京 | 30 | 5

真实数据是这样的:
名称 | 明细 | 地域| 价格
K8s | ACK | 杭州 | 10
K8s | ACK |南京 | 20
服务器 | ECS |上海 | 3.33
服务器 | ECS |上海 | 3.33
服务器 | ECS |上海 | 3.34
服务器 | ECS |杭州 | 10
服务器 | ECS |南京 | 10
2887 次点击
所在节点    程序员
28 条回复
bingfengfeifei
2023-07-22 21:57:14 +08:00
Clickhouse 的话
select 名称,明细, groupUniqArray(地域), sum(价格), count() as count
from table_name
group by 名称,明细
dys0327
2023-07-22 23:08:26 +08:00
@findlisa #2 大佬,本人小白,问个问题哈,看他上面的需求我理解的是根据名称和明细合并地域、合计价格、统计条数,为什么 group by 要加上价格,不应该直接在 select 后面 sum(价格)吗?
isnullstring
2023-07-22 23:16:27 +08:00
没怎么写过 SQL ?这也太简单了吧.....
我主要用 sqlserver ,所以思路上来就是 按名称和明细 字段 group ,然后 distince 开窗函数 做地域 字段,sum 做价格,count 做条目数
调用两个脑细胞完事
如果数据量上百万的话,那还是用程序来做吧
leonhao
2023-07-22 23:33:41 +08:00
@isnullstring 数据量大才应该用 sql
findlisa
2023-07-22 23:43:54 +08:00
@dys0327 你说的没错我也想这样写,但是我觉得产品的单价合并貌似逻辑有问题,所以后面问了一下楼主
790002517zzy
2023-07-22 23:56:14 +08:00
@leixx 只要你会描述 GPT 就会写
isnullstring
2023-07-23 00:29:07 +08:00
@leonhao #24 这种简单的无所谓,复杂一点,SQL 不好写
documentzhangx66
2023-07-23 00:55:57 +08:00
别总想着一条 SQL 做完复杂计算,真的是被毒教材给坑害了。

临时表,游标,分布计算,很难吗?

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

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

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

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

© 2021 V2EX