标签: group-concat

连接具有相同值(不同列)的行的列值

SQL Server 2005

我有一张返回的表

ID  name    prop    value
--------------------------
1   one     Prop1   a
1   one     Prop1   b
1   one     Prop2   c
2   two     Prop1   d
2   two     Prop2   e
Run Code Online (Sandbox Code Playgroud)

我如何对其运行选择以返回

ID  name    prop        value
-----------------------------
1   one     Prop1       a,b
1   one     Prop2       c
2   two     Prop1       d
2   two     Prop2       e
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server group-concat

5
推荐指数
1
解决办法
3万
查看次数

如何一起使用UNION和GROUP_CONCAT

我遇到了在这种情况下使用UNION和GROUP_CONCAT的正确语法的问题:

我有4张桌子:

  • base:主表是否有很多列.
  • mm:使用'tablenames'字段指向下两个表的mm表.
  • t1和t2存储相关的数据.

'base'表中的记录可以通过mm表在t1和t2中有许多相关记录.

我在MySQL中创建一个VIEW,我需要将所有相关记录显示在一个用逗号分隔的列中.

这是基本的MySQL代码:

SELECT base.uid, t1.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t1 
ON mm.uid_foreign=t1.uid WHERE mm.tablenames = 't1'

UNION

SELECT base.uid, t2.nombre_es
FROM base
INNER JOIN mm 
ON mm.uid_local=base.uid
INNER JOIN t2
ON mm.uid_foreign=t2.uid WHERE mm.tablenames = 't2'
Run Code Online (Sandbox Code Playgroud)

提前致谢.


我可以使用两个VIEWS,第一个使用上面的代码,名称为'viewtest',第二个使用此代码:

SELECT base.uid,
GROUP_CONCAT(DISTINCT vi.nombre_es ORDER BY vi.nombre_es SEPARATOR ',') as nombre

FROM base

INNER JOIN viewtest as vi
ON vi.uid=base.uid

GROUP BY uid
Run Code Online (Sandbox Code Playgroud)

现在的问题是¿如何在一个视图中加入这两个视图?

mysql syntax union group-concat

5
推荐指数
1
解决办法
5888
查看次数

MySQL group_concat在子查询中返回多于一行

我有一个查询,如下,应该有效。但是,MySQL 给了我错误消息

子查询返回多行

SELECT e.episode_pk,
       (SELECT GROUP_CONCAT(d.fulldescription separator ', ')
        FROM episode_rhythm er
        JOIN diagnosis d ON er.diagnosis_fk = d.diagnosis_pk 
        WHERE er.episode_fk = e.episode_pk
        GROUP BY d.fulldescription) as rhythmDesc 
FROM episode e  
WHERE e.patientid_fk = '89976';
Run Code Online (Sandbox Code Playgroud)

在此查询中使用 的全部目的GROUP_CONCAT是每个“情节”仅返回一行。

外部选择返回多行。
当针对单个剧集表主键运行时,内部SELECT会返回一行,正如您所怀疑的:

SELECT group_concat(d.fulldescription separator ', ')
FROM episode_rhythm er
JOIN diagnosis d ON er.diagnosis_fk = d.diagnosis_pk 
WHERE er.episode_fk = 234776
GROUP BY d.fulldescription;
Run Code Online (Sandbox Code Playgroud)

当针对单个剧集表主键运行时,SELECT不带 的内部可能会返回多行:GROUP_CONCAT

SELECT d.fulldescription
FROM episode_rhythm er
JOIN diagnosis d ON …
Run Code Online (Sandbox Code Playgroud)

mysql subquery group-concat

5
推荐指数
1
解决办法
9020
查看次数

Mysql查询仅在GROUP_CONCAT中选择具有唯一结果的行

有没有办法只选择具有除前一个选定行之外的其他结果的行?在我的一个表中,我存储广告数据,即每个广告一行.我还在另一个表中存储每个dag,周,月的租金价格,该表每个广告包含多个行.我想从表2中选择其中一个价格(在表2中的示例行1和3中)与数据选择在同一查询中发生变化的行.我知道在这种情况下我必须使用GROUP_CONCAT来获取一行而不是2行结果,但是如何从表2获得2个结果行,总共得到1个结果行?

查询的结果必须类似于:tre,234,"12345678911,12,45,32555676711,12,67"

Table 1 (advertisements)
ID_adv      data1       data2   
1       tre     234
2       ghj     34
3       jk      098 
4       jfjk        12

Table 2 (dates)
ID_dates    ID_adv      timestamp_day   price1      price2
1       1       12345678911     12      45
2       1       22345677771     12      45
3       1       32555678911     12      67
4       2       42345671231     34      34
Run Code Online (Sandbox Code Playgroud)

我试过了

SELECT 
t1.*, 
GROUP_CONCAT(t2.date) AS dates 
FROM Table1 t1 
LEFT JOIN Table2 t2 ON t2.ID_adv = t1.ID_adv 
WHERE t1.ID_adv = 3 GROUP BY t1.ID_adv
Run Code Online (Sandbox Code Playgroud)

mysql sql group-concat

5
推荐指数
1
解决办法
284
查看次数

table连接多个group_concat

关于使用group_concat连接表有问题.这是详细信息.

table_orders:

item_cd    order_id    descs            quantity    status   seq_no
 1           100       coca-cola         2           A         232
 2           100       pizza             1           A         233  
 3           101       cheeseburger      5           A         234
 4           102       pepsi             4           A         235
 4           
Run Code Online (Sandbox Code Playgroud)

table_instructions:

item_cd    instruction  
  3         more cheese  
  3         less vegetable  
Run Code Online (Sandbox Code Playgroud)

cancelled_item_table:

 quantity  seq_no  
    1       234
    1       234
    1       235  
Run Code Online (Sandbox Code Playgroud)

现在我想要实现的是这样的:

item_cd    descs         quantity    instructions                   cancelled_item  
 1         coca-cola         2       -                                  -
 2         pizza             1       -                                  -
 3         cheeseburger      2       more cheese, less vegetable       1,1
 4         pepsi             4       -                                  1 …
Run Code Online (Sandbox Code Playgroud)

mysql group-by group-concat

5
推荐指数
1
解决办法
1892
查看次数

MySQL 中的 GROUP_CONCAT - 如何包含不同的值?

我有两张用 UNION ALL 查询的表 - 一张用于 Android,一张用于 iPhone。每个表都有自己的设备字段(“android”或“iphone”)。

我使用GROUP_CONCAT(DISTINCT `device` ORDER BY `device` SEPARATOR ', ') AS `device`了几次,每次当我按另一列(例如日期、用户 ID 等)分组时。我也使用相同的 GROUP_CONCAT 来计算总数。

问题是,当我按日期分组时,我选择设备的 GROUP_CONCAT(不是直接设备),因为有些日期同时购买了 Android 和 iPhone。选择还包括 WHERE 或 HAVING 以让用户按特定日期、加入日期的用户数量等进行过滤。当我计算总数时,我在设备上有 GROUP_CONCAT,它本身就是一个 GROUP_CONCAT 函数。结果可能类似于“android, android, iphone, iphone”,因为有只有 Android 的日期、只有 iPhone 的日期和两者都有的日期(其他查询只能有这些选项中的一个或一些)。我正在寻找一种方法将此结果转换为“android, iphone”。

目前我正在使用一个 PHP 函数:

    private function get_device_human_string($fp_device_computer_string)
    {
        $devices= array(
            'android' => 'Android',
            'iphone' => 'iPhone'
        );
        $device_computer_string= strtolower($fp_device_computer_string);
        $ret= array();
        foreach ($devices as $device_key => $device_human_string)
        {
            if (strpos($device_computer_string, $device_key) !== false)
            {
                $ret[]= $device_human_string;
            } …
Run Code Online (Sandbox Code Playgroud)

mysql sql distinct group-concat

5
推荐指数
1
解决办法
2119
查看次数

使用 string_agg 为 group_concat 聚合别名

我知道 postgres 没有 group_concat,但我想通过使用 string_agg(或任何其他有效的方式)来模拟它的字符串。

由于无法更改遗留代码,我需要使用名为 group_concat 的函数。

我怎样才能做到这一点?

对于它的价值,我还尝试group_concat使用常规 concat 来实现,但也遇到了错误:

CREATE AGGREGATE group_concat (text) (sfunc = concat, stype=text)
Run Code Online (Sandbox Code Playgroud)

错误:

“函数 concat(text,text) 不存在”

postgresql group-concat

5
推荐指数
1
解决办法
736
查看次数

MySQL如何选择JSON数组

在 MySQL 5.7 中,我们有 JSON_ARRAY 对象。我想执行类似于 a 的操作SELECT GROUP_CONCAT(field),但将结果放入 JSON_ARRAY 中。

我当前的查询是:

SELECT GROUP_CONCAT(name) FROM users;
Run Code Online (Sandbox Code Playgroud)

结果:约翰、迈克尔、索菲亚

我希望结果是: ["john","michael","sofia"]

我当前的解决方案是:

select @j:=json_array_append(@j,'$',name) from users
Run Code Online (Sandbox Code Playgroud)

但这非常低效,因为它会为每一行重新计算。是否有可能更有效地实现这一目标?

mysql arrays group-concat

5
推荐指数
1
解决办法
2614
查看次数

MySQL中的GROUP_CONCAT和Longtext有问题

SQL ......

UPDATE Threads t 
SET t.Content = (
    SELECT GROUP_CONCAT(a.Content ORDER BY a.PageID SEPARATOR '<!-- pagebreak -->') 
    FROM MSarticlepages a
    WHERE a.ArticleID = t.MSthreadID GROUP BY a.ArticleID
)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它将所有文章的页面(每个页面都作为longtext存储在不同的行中)和GROUP_CONCAT将它们放入单个longtext行中.问题是结果只有很多字符然后被完全截断,丢失了大约90%的内容.CONCAT不能很好地处理longtext,还是还有其他我做错的事情?

mysql truncated group-concat longtext

4
推荐指数
2
解决办法
1万
查看次数

MySQL - 如何通过值将子查询用于IN语句

问题是获取表列数据并将其用作IN函数的值列表;

在这个例子中,我创建了2个表:电影和流派

表"电影"包含3列:id,name和流派.表"genres"包含2列:id和name.

+- movies-+
|         |- movie_id - int(11) - AUTO_INCREMENT - PRIMARY
|         |- movie_name - varchar(255)
|         |- movie_genres - varchar(255)
|
|         
+- genres-+
          |- genre_id - int(11) - AUTO_INCREMENT - PRIMARY
          |- genre_name - varchar(255)
Run Code Online (Sandbox Code Playgroud)

两个表都包含一些虚拟数据:

+----------+------------+--------------+
| movie_id | movie_name | movie_genres |
+----------+------------+--------------+
|        1 | MOVIE 1    | 2,3,1        |
|        2 | MOVIE 2    | 2,4          |
|        3 | MOVIE 3    | 1,3          |
|        4 | MOVIE 4    | …
Run Code Online (Sandbox Code Playgroud)

mysql sql csv group-concat

4
推荐指数
1
解决办法
1798
查看次数