我似乎反对这个问题很多,我的数据格式如下:
+----+----------------------+
| id | colors |
+----+----------------------+
| 1 | Red,Green,Blue |
| 2 | Orangered,Periwinkle |
+----+----------------------+
Run Code Online (Sandbox Code Playgroud)
但我希望它的格式如下:
+----+------------+
| id | colors |
+----+------------+
| 1 | Red |
| 1 | Green |
| 1 | Blue |
| 2 | Orangered |
| 2 | Periwinkle |
+----+------------+
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?什么是这种操作甚至叫做?
有没有选项让MySQL的Group_Concat函数包含空值?
请考虑源表中的以下示例:
userId, questionId, selectionId
7, 3, NULL
7, 4, 1
7, 5, 2
Run Code Online (Sandbox Code Playgroud)
当我使用GROUP_CONCAT查询选择表时,我得到以下内容:
7, 4=1,5=2
Run Code Online (Sandbox Code Playgroud)
我想得到以下内容:
7, 3=NULL,4=1,5=2
Run Code Online (Sandbox Code Playgroud)
作为参考,我的查询如下所示:
Select userId, GROUP_CONCAT(CONCAT(questionId, '=', selectionId))
From selection
Group by userId;
Run Code Online (Sandbox Code Playgroud)
我也试过像这样添加一个IFNULL:
Select userId, GROUP_CONCAT(IFNULL(CONCAT(questionId, '=', selectionId), 'NULL'))
From selection
Group by userId;
Run Code Online (Sandbox Code Playgroud)
但这产生了以下结果:
7, NULL,4=1,5=2
Run Code Online (Sandbox Code Playgroud)
注意 - 还有一个我忘了包含的复杂性.selectionId是另一个表的外键.我使用左外连接到selection_text表.我的真实查询包括该表中的字段(这些字段解析为NULL,因为selectionId为null).
我有一个表到实体(让我们称之为人)和属性(一个人可以有任意数量的属性).例如:
Name Age
--------
Jane 27
Joe 36
Jim 16
Run Code Online (Sandbox Code Playgroud)
Name Property
-----------------
Jane Smart
Jane Funny
Jane Good-looking
Joe Smart
Joe Workaholic
Jim Funny
Jim Young
Run Code Online (Sandbox Code Playgroud)
我想写一个有效的选择,根据年龄选择人,并返回他们的全部或部分属性.
Ex: People older than 26
Name Properties
Jane Smart, Funny, Good-looking
Joe Smart, Workaholic
Run Code Online (Sandbox Code Playgroud)
返回其中一个属性和总属性数也是可以接受的.
查询应该是高效的:人员表中有数百万行,属性表中有数十万行(因此大多数人没有属性).一次选择数百行.
有什么办法吗?
我想在GROUP_CONCAT函数中对结果进行排序.问题是,GROUP_CONCAT函数中的选择是另一个函数,就像这样(幻想选择):
SELECT a.name,
GROUP_CONCAT(DISTINCT CONCAT_WS(':', b.id, c.name) ORDER BY b.id ASC) AS course
FROM people a, stuff b, courses c
GROUP BY a.id
Run Code Online (Sandbox Code Playgroud)
我想得到一个结果(由b.id排序):
michael 1:science,2:maths,3:physics
Run Code Online (Sandbox Code Playgroud)
但我得到:
michael 2:maths,1:science,3:physics
Run Code Online (Sandbox Code Playgroud)
有谁知道我可以在我的group_concat中通过b.id订购?
我有这样的查询:
SELECT product.id,
GROUP_CONCAT(image.id) AS images_id,
GROUP_CONCAT(image.title) AS images_title,
GROUP_CONCAT(facet.id) AS facets_id
...
GROUP BY product.id
Run Code Online (Sandbox Code Playgroud)
并且查询有效,但不是预期的,因为如果我有一个带有5个facet和1个图像的产品(假设id为7的图像),那么我在"images_id"中得到类似的东西:
"7,7,7, 7,7"
如果我有2张图像(7和3),那么我会得到类似的东西:
"7,7,7,7,7,3,3,3,3,3"
并且在方面我得到类似的东西:
" 8,7,6,5,4,8,7,6,5,4"
我认为MySQL正在对查询返回的不同行进行某种类型的并集,然后连接所有内容.
我的预期结果是(对于最后一个例子):
images_id ="7,3"
facets_id ="8,7,6,5,4"
我可以在GROUP_CONCAT中使用DISTINCT获得它,但后来我有另一个问题:如果我有两个具有相同标题的图像,其中一个是ommited,然后我得到类似的东西:
images_id ="7,3,5"
images_title ="Title7and3,Title5"
所以我想念images_id和images_title之间的关系.
有人知道是否有可能在MySQL中进行此查询?
也许我在没有任何实际好处的情况下使一切变得复杂.我试图只执行一个查询,因为性能,但现在我不太确定它是否更快执行两个查询(一个用于选择构面,另一个用于图像).
请解释一下您认为最佳解决方案是什么以及为什么.
谢谢 !
给出以下MySQL查询:
SELECT
`show`.`id`
, GROUP_CONCAT( `showClips`.`clipId` ORDER BY `position` ASC ) AS 'playlist'
FROM
`show`
INNER JOIN
`showClips`
ON
( `show`.`id` = `showClips`.`showId` )
;
Run Code Online (Sandbox Code Playgroud)
我想从数据库中检索所有"节目"的列表,包括包含"剪辑"的ID.
只要表中有条目,这样就可以正常工作show.对于这个问题,我们假设所有表都是空的.
GROUP_CONCAT将返回NULL并因此强制一行进入结果(仅包含NULL值).
然后我的应用程序会认为存在一个显示/结果.但结果将无效.这当然可以检查,但我觉得这可以(并且应该)在查询中已经被阻止了.
我使用group_concat将很多行连接成一个.
我使用以下方法将group concat设置为10000:
SET group_concat_max_len = 10000;
Run Code Online (Sandbox Code Playgroud)
但即便如此,我的输出单元仍然不完整,最终以...结束
我尝试设置group_concat_max_len = 20000甚至没有帮助.
我也尝试将group_concat_max_len设置为99999999.它仍然无法完成输出文本.我检查了长度= 230个字符的组连续停止之一然后给...
还有其他方法吗?
我正在寻找LINQ等效于Sybase的LIST()或MySQL的group_concat()
它会转换:
User Hobby
--------------
Bob Football
Bob Golf
Bob Tennis
Sue Sleeping
Sue Drinking
Run Code Online (Sandbox Code Playgroud)
至:
User Hobby
--------------
Bob Football, Golf, Tennis
Sue Sleeping, Drinking
Run Code Online (Sandbox Code Playgroud) 我有以下查询.这个想法是,它让我知道什么groups,然后users,可以访问每个component_instance.我想知道是否有更好的方法来执行此操作,因为查询速度很慢,但每次处理此表时都有这些额外的列非常方便:
SELECT component_instances.*,
GROUP_CONCAT(DISTINCT IF(permissions.view, groups.id, NULL)) AS view_group_ids,
GROUP_CONCAT(DISTINCT IF(permissions.edit, groups.id, NULL)) AS edit_group_ids,
GROUP_CONCAT(DISTINCT IF(permissions.view, users.id, NULL)) AS view_user_ids,
GROUP_CONCAT(DISTINCT IF(permissions.edit, users.id, NULL)) AS edit_user_ids
FROM `component_instances`
LEFT OUTER JOIN permissions ON permissions.component_instance_id = component_instances.id
LEFT OUTER JOIN groups ON groups.id = permissions.group_id
LEFT OUTER JOIN groups_users ON groups_users.group_id = groups.id
LEFT OUTER JOIN users ON users.id = groups_users.user_id
GROUP BY component_instances.id
ORDER BY (case when component_instances.ancestry is null then 0 else …Run Code Online (Sandbox Code Playgroud) 说我有下面的表格fruits:
id | type | name
-----------------
0 | apple | fuji
1 | apple | mac
2 | orange | navel
Run Code Online (Sandbox Code Playgroud)
我的目标是最终得到一个不同types的逗号和逗号分隔的列表names:
apple, 2, "fuji,mac"
orange, 1, "navel"
Run Code Online (Sandbox Code Playgroud)
这可以GROUP_CONCAT在MySQL中轻松完成,但我遇到了与Django等效的问题.这是我到目前为止,但我错过了GROUP_CONCAT这些东西:
query_set = Fruits.objects.values('type').annotate(count=Count('type')).order_by('-count')
Run Code Online (Sandbox Code Playgroud)
我想尽可能避免使用原始SQL查询.
任何帮助将不胜感激!
谢谢!=)
group-concat ×10
mysql ×9
csv ×2
sql ×2
database ×1
django ×1
format ×1
group-by ×1
join ×1
linq ×1
linq-group ×1
pivot ×1
sql-order-by ×1