标签: group-concat

JOIN和GROUP_CONCAT有三个表

我有三张桌子:

users:        sports:           user_sports:

id | name     id | name         id_user | id_sport | pref
---+--------  ---+------------  --------+----------+------
 1 | Peter     1 | Tennis             1 |        1 |    0
 2 | Alice     2 | Football           1 |        2 |    1
 3 | Bob       3 | Basketball         2 |        3 |    0
                                      3 |        1 |    2
                                      3 |        3 |    1
                                      3 |        2 |    0
Run Code Online (Sandbox Code Playgroud)

该表user_sports链接userssports具有优先顺序(pref).

我需要创建一个返回此的查询:

id | name  | …
Run Code Online (Sandbox Code Playgroud)

mysql sql join group-concat

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

MySQL Group_Concat重复值

我正在开发一个名为PHP-Bouncer的开源项目,我正在为我正在编写的MySQL Query遇到问题.基本上我们有三个表:BouncerRoles,PageInRole和BouncerPageOverrides.BouncerRoles包含访问级别,另外两个表通过外键链接回BouncerRoles并提供多个附加数据条目.我编写了以下查询以尝试同时提取我需要的所有角色数据:

select BouncerRoles.RoleID, BouncerRoles.RoleName, 
GROUP_CONCAT(PageInRole.PageName separator '|') as ProvidedPages, 
GROUP_CONCAT(CONCAT(BouncerPageOverrides.OverriddenPage,'&',BouncerPageOverrides.OverridingPage) separator '|') as OverriddenPages 
from BouncerRoles join PageInRole on BouncerRoles.RoleID = PageInRole.RoleID 
join BouncerPageOverrides on BouncerRoles.RoleID = BouncerPageOverrides.RoleID
group by BouncerRoles.RoleID;
Run Code Online (Sandbox Code Playgroud)

此查询的目标是提供RoleID,RoleName,提供的页面的管道分隔列表,以及管道分隔的覆盖列表(以覆盖页和覆盖页的形式).一切都有效,除了查询的最后一列,它会像这样重复一遍又一遍地找到的条目(以CSV格式输出):

RoleID,RoleName,ProvidedPages,OverriddenPages
2,Exchange,exchange-how.php|exchange-support.php|exchange.php|premium-promo.php|exchange-resorts.php|premiumplus-promo.php|exchange-deposit.php|exchange-requestdestination.php,whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php|whyexchange.php&exhange.php
3,Premium,premiumplus-promo.php|premium-cruises.php|premium-resorts.php|premium-condohome.php|premium-hotelaircar.php|premium.php|premium-restaurants.php|premium-overview.php,premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php|premium-promo.php&premium.php
4,"Premium Plus",premiumplus-exclusiveescapes.php|premiumplus.php|premiumplus-overview.php|premiumplus-concierge.php|premiumplus-airportlounge.php,premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php|premiumplus-promo.php&premiumplus.php
Run Code Online (Sandbox Code Playgroud)

在我的查询中有没有我做错了导致这个?

mysql group-concat

10
推荐指数
1
解决办法
4444
查看次数

在GROUP BY之后左转加入?

我有一个"歌曲","Songs_Tags"(与歌曲相关的歌曲)和"Songs_Votes"(与布尔喜欢/不喜欢的歌曲相关)的表格.

我需要使用其标签的GROUP_CONCAT()以及喜欢(真实)和不喜欢(假)的数量来检索歌曲.

我的查询是这样的:

SELECT
    s.*,
    GROUP_CONCAT(st.id_tag) AS tags_ids,
    COUNT(CASE WHEN v.vote=1 THEN 1 ELSE NULL END) as votesUp,
    COUNT(CASE WHEN v.vote=0 THEN 1 ELSE NULL END) as votesDown,
FROM Songs s
    LEFT JOIN Songs_Tags st ON (s.id = st.id_song)
    LEFT JOIN Votes v ON (s.id=v.id_song)
GROUP BY s.id
ORDER BY id DESC
Run Code Online (Sandbox Code Playgroud)

问题是,当一首歌有超过1个标签时,它会被多次返回,所以当我执行COUNT()时,它会返回更多结果.

我能想到的最好的解决方案是,如果能够在GROUP BY之后进行最后的LEFT JOIN(现在每首歌只有一个条目).然后我需要另一个GROUP BY m.id.

有没有办法实现这一目标?我需要使用子查询吗?

mysql join group-by group-concat

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

GROUP CONCAT因某些原因无法工作

我正在形成一个select语句,我收到了这个错误.

FUNCTION GROUP_CONCAT不存在.检查参考手册中的"功能名称解析和解决方案"部分

我不明白这一点,因为小组concats使用了有人给我的代码,我构建了我的新代码.这是它的外观

SELECT
`shirts`.`shirt_name`,
`shirts`.`men` AS `main_photo`,
GROUP_CONCAT (`shirt_sizes`.`size_name`) AS `sizes`
FROM
`shirts`
JOIN
`shirts_link` ON `shirts_link`.`shirt_id`=`shirts`.`id`
JOIN
`shirt_sizes` ON `shirt_sizes`.`id`=`shirts_link`.`size_id`
JOIN
`shirt_prices` ON `shirt_prices`.`id`=`shirts_link`.`price_id`
WHERE `men`!=''
GROUP BY
`shirt_prices`.`price_cat`
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

mysql sql select group-concat

9
推荐指数
1
解决办法
5083
查看次数

使用Usemin时如何向Concat选项添加分隔符

我正在使用Grunt-usemin.但是连接的JS没有用';'正确分隔.我怎么告诉usemin只为JS文件而不是CSS文件添加分隔符?

目前,我的usemin任务看起来像这样:

    useminPrepare: {
        options: {
            dest: '<%= config.dist %>'
        },
        html: '<%= config.app %>/index.html'
    },

    // Performs rewrites based on rev and the useminPrepare configuration
    usemin: {
        options: {
            assetsDirs: ['<%= config.dist %>', '<%= config.dist %>/images']
        },
        concat: {
            separator: ';'
        },
        html: ['<%= config.dist %>/{,*/}*.html'],
        css: ['<%= config.dist %>/styles/{,*/}*.css']
    },
Run Code Online (Sandbox Code Playgroud)

另一个用例是将每个连接模块包装在IIFE中,这需要这种配置,但只应该应用于*.js文件:

concat: {
    options: {
        banner: ';(function () {',
        separator: '})(); (function () {',
        footer: '})();'
    }
}
Run Code Online (Sandbox Code Playgroud)

group-concat gruntjs grunt-usemin

9
推荐指数
1
解决办法
327
查看次数

mysql workbench"丢失与mysql服务器的连接"

首先,我需要指出我在我的机器上运行了Wikipedia转储的sql文件,并且能够运行我需要更新许多有关内存和其他设置上可用索引大小的设置.我只想提一下,那些大的SQL查询运行成功,我没有任何关于内存或超时的问题.

现在我有一个表pagelinks(pl_from,pl_title),显示每个维基百科页面中出现的链接,例如数据可以是(1,"title1"),(1,"title2"),(2,"title3") ),(2,"title1").我想创建一个通过pl_from连接titles组的表.为此,这是我的SQL查询(我正在使用工作台):

SET @@group_concat_max_len=150000;
create table concatpagelinks 
(SELECT pl_from, GROUP_CONCAT(pl_title , ' ') as links FROM pagelinks GROUP BY pl_from)
Run Code Online (Sandbox Code Playgroud)

运行此查询我收到错误:"在查询期间丢失了与mysql服务器的连接",系统再次询问我密码.所以我搜索并找到了这个.因此我将net_read_timeout更改为1000并将connect_timeout更改为60.它没有解决问题,所以我将查询更改为:

SET @@group_concat_max_len=150000;
create table concatpagelinks 
(SELECT pl_from, GROUP_CONCAT(pl_title , ' ') as links FROM pagelinks GROUP BY pl_from limit 0,1000)
Run Code Online (Sandbox Code Playgroud)

仍然是同样的问题,令人惊奇的是每次查询运行600.495秒并且错误发生.

mysql timeout group-concat

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

如何找到每个页面的所有标签,然后将标签连成一列?

如何找到每个页面的所有标签,然后将标签连成一列?

举个例子,

页表,

page_id 
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

标签表,

tag_id      tag_name
1           A
2           B
3           C
4           D
Run Code Online (Sandbox Code Playgroud)

标记表,

page_id     tag_id
1           1
1           2
1           3
3           2
3           3
Run Code Online (Sandbox Code Playgroud)

我的工作查询,

SELECT
    p.page_id,
    GROUP_CONCAT(t.tag_name ORDER BY t.tag_name ASC SEPARATOR ",") AS tags

FROM root_pages AS p

LEFT JOIN root_mm_pages_tags AS m
ON p.page_id = m.page_id

LEFT JOIN root_tags AS t
ON t.tag_id = m.tag_id

WHERE p.page_id = t.page_id
Run Code Online (Sandbox Code Playgroud)

这是我追求的结果,

page_id         tags
1               A, B, C
2               NULL
3 …
Run Code Online (Sandbox Code Playgroud)

php mysql tagging concat group-concat

8
推荐指数
1
解决办法
94
查看次数

Concat中的Group_Concat不使用NULL值

我有一张桌子

CREATE TABLE IF NOT EXISTS `dept` (
  `did` int(11) NOT NULL,
  `dname` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `dept` (`did`, `dname`) VALUES
(1, 'Hi'),
(2, NULL),
(3, 'Hello');
Run Code Online (Sandbox Code Playgroud)

然后我有一个查询

select group_concat(concat(did,"','",dname) separator '),(') as Result from dept
Run Code Online (Sandbox Code Playgroud)

它正在产生结果 1','Hi'),('3','Hello

问题:如何从上面的查询得到结果1','Hi'),('2','NULL'),('3','Hello

它缺少具有NULL值但我需要获取所有值的行

链接SQL小提琴演示的问题

更新:如果我有多个或所有列允许NULL,是否有一些方法可以为所有列应用COALESCE或者必须在每个列单独应用?

mysql group-concat

8
推荐指数
1
解决办法
8617
查看次数

GROUP_CONCAT具有不同分隔符的多个字段

有可能做这样的事情:

GROUP_CONCAT(user, price SEPARATOR ', ') AS items
Run Code Online (Sandbox Code Playgroud)

结果是 John3.99, Mike24.99

我需要的是:

John - 3.99, Mike - 24.99
Run Code Online (Sandbox Code Playgroud)

基本上在价格领域使用另一种类型的分隔符.

mysql group-concat

8
推荐指数
1
解决办法
6864
查看次数

无法识别 string_agg 内置函数名称 - SQL Server 12.0

我想按某些列按表分组并显示其他列的值。在 SQL v.2017 中我可以使用 string_agg 函数来做到这一点。但我的 SQL 版本是 2012。我该怎么做...

create table dbo.TaskPeriods
(
 [id] [int] NULL,
 [startDate] [datetime] NULL,
 [endDate] [datetime] NULL
 )
 -------------------------------
insert into test.dbo.TaskPeriods values(1,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(2,'2018-07-24 00:00:00.000','2018-07-24 10:00:00.000')
insert into test.dbo.TaskPeriods values(3,'2018-07-24 08:00:00.000','2018-07-24 12:00:00.000')
 --------------------------------------------------------
select id,startDate,endDate from  test.dbo.TaskPeriods
 --------------------------------------------------------
select 
min (startDate)
,max (endDate)
--,string_agg(id,',')  //How to Do this Without string_agg Function
FROM test.dbo.TaskPeriods
group by startDate,endDate
Run Code Online (Sandbox Code Playgroud)

有没有办法将一个特定列与 SQL Server 12.0 中的另一组列连接起来?

sql group-concat sql-server-2012 string-agg

8
推荐指数
0
解决办法
5848
查看次数