![]() |
1
leixx OP 现在的版本是这样的:
名称 | 明细 | 价格 K8s | ACK | 30 现在产品想变成这个样子: 名称 | 明细| 地域 | 价格| 共有条目数 K8s | ACK | 杭州,南京 | 30 | 2 具体的数据大概是这样的: 名称 | 明细 | 地域 | 价格 K8s | ACK | 杭州| 10 K8s | ACK | 南京| 20 一开始的想法就比原来多了一个地域,那就 group by 下地域,然后在到内存里面计算就好了,这样其实数据量很大,而且不能支持排序,比如是按照价格或者多个字段排序,会需要拿到最后的结果集中在排序一次。 |
2
findlisa 138 天前
SELECT
名称, 明细, GROUP_CONCAT(地域) AS 地域, 价格, COUNT(*) AS 共有条目数 FROM your_table_name -- 将表名替换为你实际的表名 GROUP BY 名称, 明细, 价格; 合并数据后,价格取值逻辑是怎么样的? |
![]() |
3
mineralsalt 138 天前
视图是不是可以
|
4
zbinlin 138 天前
mysql 还是 postgresql 版本?
|
![]() |
5
Morii 138 天前
group concat 处理一下就行
|
6
Alias4ck 138 天前
|
7
goophy 138 天前
chatgpt 3.5
1. 为了将两个地域用 SQL 写出来,可以使用 GROUP_CONCAT 函数将地域字段进行拼接。可以如下写出 SQL:\n\n```sql\nSELECT 名称, 明细, GROUP_CONCAT(DISTINCT 地域) AS 地域, 价格\nFROM 表名\nGROUP BY 名称, 明细, 价格;\n```\n\n2. 条目数可以使用 COUNT 函数进行计算。可以如下写出 SQL:\n\n```sql\nSELECT 名称, 明细, GROUP_CONCAT(DISTINCT 地域) AS 地域, 价格, COUNT(*) AS 共有条目数\nFROM 表名\nGROUP BY 名称, 明细, 价格;\n```\n\n3. 如果产品很多,可以使用 WHERE 子句来筛选需要统计的产品。例如,筛选名称为\"K8s\"的产品,可以将 WHERE 子句加到 SQL 中:\n\n```sql\nSELECT 名称, 明细, GROUP_CONCAT(DISTINCT 地域) AS 地域, 价格, COUNT(*) AS 共有条目数\nFROM 表名\nWHERE 名称 = 'K8s'\nGROUP BY 名称, 明细, 价格;\n```\n\n4. 统计更多产品的数据,可以使用 UNION ALL 连接多个 SELECT 语句。例如,统计名称为\"K8s\"和\"服务器\"的产品,可以写出如下 SQL:\n\n```sql\nSELECT 名称, 明细, GROUP_CONCAT(DISTINCT 地域) AS 地域, 价格, COUNT(*) AS 共有条目数\nFROM 表名\nWHERE 名称 = 'K8s'\nGROUP BY 名称, 明细, 价格\nUNION ALL\nSELECT 名称, 明细, GROUP_CONCAT(DISTINCT 地域) AS 地域, 价格, COUNT(*) AS 共有条目数\nFROM 表名\nWHERE 名称 = '服务器'\nGROUP BY 名称, 明细, 价格;\n```\n\n 希望以上的 SQL 示例能够满足你的需求。请根据实际表名进行替换。 |
![]() |
8
790002517zzy 138 天前 via Android
不如问问 GPT
|
![]() |
9
akira 138 天前
2 楼的 sql 就对的了。
但是这种需求,想了半天总感觉怪怪的,数据量大? 那地域这栏就很奇怪了啊,最后拼接出一堆城市,是打算怎么展示。 |
![]() |
12
leixx OP @mineralsalt 好的, 没怎么用过。我去看看
|
![]() |
16
leixx OP @790002517zzy 想问来着,但是组织了半天语言,还是放弃了,不知道像我这样描述,他能不能听懂。
|
17
512357301 138 天前 via Android
看起来 op 日常不是写 SQL 的,应该是做后端开发的吧,这种需求基本上是 SQL 入门级的了。
只能说隔行如隔山,这种需求用代码实现的话,应该就得轮询或者循环查询了。 Java 、Python 、PHP 代码一般都是做点式逻辑(OLTP),SQL 批量、点式都可以😁(OLTP OLAP) |
![]() |
21
bingfengfeifei 138 天前
Clickhouse 的话
select 名称,明细, groupUniqArray(地域), sum(价格), count() as count from table_name group by 名称,明细 |
![]() |
22
dys0327 138 天前
@findlisa #2 大佬,本人小白,问个问题哈,看他上面的需求我理解的是根据名称和明细合并地域、合计价格、统计条数,为什么 group by 要加上价格,不应该直接在 select 后面 sum(价格)吗?
|
23
isnullstring 138 天前
没怎么写过 SQL ?这也太简单了吧.....
我主要用 sqlserver ,所以思路上来就是 按名称和明细 字段 group ,然后 distince 开窗函数 做地域 字段,sum 做价格,count 做条目数 调用两个脑细胞完事 如果数据量上百万的话,那还是用程序来做吧 |
24
leonhao 138 天前
@isnullstring 数据量大才应该用 sql
|
![]() |
26
790002517zzy 138 天前 via Android
@leixx 只要你会描述 GPT 就会写
|
27
isnullstring 138 天前
@leonhao #24 这种简单的无所谓,复杂一点,SQL 不好写
|
![]() |
28
documentzhangx66 138 天前
别总想着一条 SQL 做完复杂计算,真的是被毒教材给坑害了。
临时表,游标,分布计算,很难吗? |