Ubuntu 12.04 上的 MySQL 5.5.28
如果结果比group_concat_max_len
那么长,则结果将被优雅地截断。
目前我有一个脚本试图提前检查所需的长度并将其设置group_concat_max_len
为足够大。
但是检查会增加额外的查询。仅设置group_concat_max_len
为最大值有什么缺点吗?好处是查询更少。
假设我有以下查询:
SELECT *
FROM AppDetails, AppTags
WHERE AppDetails.AppID = '1'
AND AppDetails.AppID = AppTags.AppID
Run Code Online (Sandbox Code Playgroud)
这给出了以下结果:
AppID AppName AppType Tag
1 Application1 Utility Test1
1 Application1 Utility Test2
1 Application1 Utility Test3
Run Code Online (Sandbox Code Playgroud)
如何修改查询以返回如下内容:
AppID AppName AppType Tags
1 Application1 Utility Test1,Test2,Test3
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用group_concat
,concat
和其他函数编写查询,但我陷入困境,无法加入和分组数据以在 1 个单元格中表示它们。
这是我的数据如何...
table1
+-----+---------+
| id | ... |
+-----+---------+
| 1 | |
| 2 | |
| 3 | |
+-----+---------+
table2
+-----+-----+-------+
| id | env | infid |
+-----+-----+-------+
| 1 | p | 10 |
| 1 | p | 11 |
| 1 | p | 20 |
| 1 | p | 12 |
| 1 | D | 21 |
| 1 | D | 22 …
Run Code Online (Sandbox Code Playgroud) 在表中作为
id name type info
1 BMW car yes
2 Reno car no
3 IBM electronics no
4 Sony electronics yes
5 Mazda car yes
Run Code Online (Sandbox Code Playgroud)
我GROUP_CONCAT
用来获取每个的列表type
,但我想将连接的列分隔为按列分类的多个列info
。它应该是这样的
SELECT type,
GROUP_CONCAT(name) ORDER BY id ASC SEPARATOR ' ') AS list_with_info
GROUP_CONCAT(name) ORDER BY id ASC SEPARATOR ' ') AS list_without_info
FROM table1 GROUP BY type
Run Code Online (Sandbox Code Playgroud)
如何引入WHERE
子句或使用其他方法返回多个连接列?
我有一张有 260 万条记录的表。它看起来像这样:
email prject_name
rafael.nadal@xyz.com lab1
rafael.nadal@xyz.com lab2
rafael.nadal@xyz.com lab3
TEST@TEST.COM shift1
TEST@TEST.COM shift2
Run Code Online (Sandbox Code Playgroud)
但我希望我的桌子看起来像这样:
email project_name
rafael.nadal@xyz.com lab1, lab2, lab3
TEST@TEST.COM shift1, shift2, shift3
Run Code Online (Sandbox Code Playgroud)
我用过这个查询
select distinct email ,
STUFF((Select ','+project_name
from dbo.[UMG sent 2016] as T1
where T1.email=T2.email
FOR XML PATH('')),1,1,'') from dbo.[UMG sent 2016] as T2;
Run Code Online (Sandbox Code Playgroud)
它已经运行了5个小时。
如何加快流程?
我有一个规范化的数据库,我正在尝试使用 JOIN 和 GROUP_CONCAT 从多个表中返回数据。
问题:使用 GROUP_CONCAT 复制行。我不能使用 DISTINCT,因为某些数据(成分制造商)确实需要复制。
这是我当前的查询和数据库结构(SQL Fiddle):
SELECT recipe.*,
GROUP_CONCAT(recipe_detail.ingredient_id) AS iid,
GROUP_CONCAT(ingredient.name) AS iname,
GROUP_CONCAT(ingredient_mfr.abbr) AS mabbr,
GROUP_CONCAT(recipe_tag.name) AS tag
FROM recipe
LEFT JOIN recipe_detail
ON recipe.id = recipe_detail.recipe_id
LEFT JOIN ingredient
ON recipe_detail.ingredient_id = ingredient.id
LEFT JOIN ingredient_mfr
ON ingredient.mfr_id = ingredient_mfr.id
LEFT JOIN recipe_tagmap
ON recipe.id = recipe_tagmap.recipe_id
LEFT JOIN recipe_tag
ON recipe_tagmap.tag_id = recipe_tag.id
WHERE recipe.user_id = 1
GROUP BY recipe.id
recipe
+------------+------------+-----------+
| id | name | user_id | …
Run Code Online (Sandbox Code Playgroud) 我有一个主要是静态目标的表格,另一个用于跟踪用户完成这些目标的情况。他们可以将完成与在另一个表格和/或文本注释中输入的一个或多个记录相关联。我想将所有这些一起格式化为一个条目以显示在表格中(即每个目标一行)。
下面是一个Completion
可能看起来像的示例:
ID userID objectiveID recordID text
1 4 8 500 NULL
2 4 8 NULL "Lorem ipsum..."
3 4 8 750 NULL
Run Code Online (Sandbox Code Playgroud)
我已经走了这么远:
SELECT objectiveID,
GROUP_CONCAT(recordID SEPARATOR ',') AS records,
GROUP_CONCAT(text SEPARATOR ',') AS text
FROM Completion AS c
GROUP BY objectiveID;
Run Code Online (Sandbox Code Playgroud)
返回:
objectiveID records text
8 "500,750" "Lorem ipsum..."
Run Code Online (Sandbox Code Playgroud)
然而,我实际上想要显示的是被引用的代码的属性recordID
......假设这是Record
表:
ID userID codeID
500 4 1111
750 4 2222
Run Code Online (Sandbox Code Playgroud)
这是Code
表:
ID description
1111 dolor
2222 sit amet
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
objectiveID records …
Run Code Online (Sandbox Code Playgroud) 我被困在一个连接表查询上,每月显示涉及 GROUP BY 和 GROUP_CONCAT 的数据。
这是一个简单的客户端表(本文底部的 DDL 和 DML):
id | Name
1 | Sony
2 | Toshiba
3 | Apple
4 | LG
5 | Uco
Run Code Online (Sandbox Code Playgroud)
然后是事件表
id | client_id | date_start
1 | 1 | 2017-01-12 18:44:42
2 | 1 | 2017-01-13 18:44:42
3 | 1 | 2017-01-14 18:44:42
4 | 1 | 2017-02-12 18:44:42
5 | 1 | 2017-03-12 18:44:42
6 | 1 | 2017-07-12 18:44:42
7 | 2 | 2017-02-12 18:44:42
8 | 2 | …
Run Code Online (Sandbox Code Playgroud) 我正在运行 SQL Server 2014
我有一个看起来像这样的表:
ID | Name | AddressType | Address | Features
========================================================
1 | Bob | Home | 123 Nope St | JP
2 | John | Work | 555 Fake St | MNGF
2 | John | Home | 654 Madeup Ln | IMP JP
3 | Kim | Work | 92 Nadda Blvd | MP
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个 SQL Server 查询来查找重复的 ID,并始终返回包含“工作”地址的行,但我希望它将两行中的功能连接起来,以便得到如下所示的结果:
ID | Name | AddressType | Address | Features
========================================================
1 | Bob | Home …
Run Code Online (Sandbox Code Playgroud) 我有两个表,首先是表 Product:
id|category_id
--+-----------
1 | 12345
2 | 12345
3 | 12465
Run Code Online (Sandbox Code Playgroud)
然后是表活动:
id|prod_id|activity_type |description
--+-------+----------------+-----------
1 | 1 | Initialization | blah
2 | 1 | Finalization | foo
3 | 2 | Initialization | blah again
4 | 2 | Duplication | bar
5 | 2 | Finalization | foobar
6 | 3 | Initialization | blob
7 | 3 | Migration | A to B
8 | 3 | Migration | B to C
9 | …
Run Code Online (Sandbox Code Playgroud) 以下查询工作正常
SELECT
*,
(SELECT
GROUP_CONCAT(url SEPARATOR '$$' )
FROM project_photos
WHERE project_id = projects.id
ORDER BY priority) AS images
FROM projects
WHERE catID = 2
LIMIT 0,5
Run Code Online (Sandbox Code Playgroud)
但该images
列并未按优先顺序排列。我无法理解为什么会发生这种情况
CREATE TABLE `projects` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`catID` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`description` varchar(400) NOT NULL,
`url` varchar(255) DEFAULT NULL,
`tags` varchar(255) DEFAULT NULL,
`featured` varchar(3) NOT NULL DEFAULT 'No',
`featured_url` varchar(255) DEFAULT NULL,
`order` int(11) DEFAULT NULL,
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY …
Run Code Online (Sandbox Code Playgroud)