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