【问题标题】:how to use group_concat with group by如何将 group_concat 与 group by 一起使用
【发布时间】:2012-11-12 11:19:25
【问题描述】:

这是我的查询:

 SELECT 
    O.OrderId,
    O.Number,
    (SELECT 
            CONCAT(A.Detail, ' ', C.Name, ' / ', Ci.Name)
        FROM
            kobiakinlar.Address AS A
                INNER JOIN
            County AS C ON C.CountyId = A.CountyId
                INNER JOIN
            City AS Ci ON C.CityId = Ci.CityId
        WHERE
            UserId = O.UserId) AS UserAddress,
    (SELECT 
            CASE
                    WHEN O.Status = 0 THEN 'Onay Bekliyor'
                    WHEN O.Status = 1 THEN 'Onaylandı'
                    WHEN O.Status = 2 THEN 'Reddedildi'
                END
        ) Status,
    O.Creation,
    (SELECT 
            CASE
                    WHEN O.IsDelivered = 0 THEN 'Teslim Edilmedi'
                    ELSE 'Teslim Edildi'
                END
        ) IsDelivered,
    SUM(T.Price) Price,
    GROUP_CONCAT(T.NAME) Products
FROM
    kobiakinlar.order O
        INNER JOIN
    (SELECT  
        P.Name, op.OrderId, op.Price
    FROM
        kobiakinlar.product P
    JOIN kobiakinlar.orderproduct op ON op.ProductId = P.productId
 ) T ON O.orderId = T.orderId
        INNER JOIN
    address A ON A.AddressId = O.AddressId

返回:

但我想试试这个:

我该怎么办?你对我有什么建议吗?

【问题讨论】:

  • 你的SQL语句中没有group_by
  • @ManseUK,是的,因为,我放了但它没有用......而且我找不到我应该把我的小组放在哪里
  • 详细说明您需要对哪些列进行分组等。从屏幕截图中无法理解。
  • @nawfal,我需要用 orderId 分组...
  • 看不到数据很困难。您确定订单 id = 5 和 8 的记录存在于您的数据库中,并且没有 WHERE/JOIN 条件将它们切断吗?

标签: mysql sql group-by group-concat


【解决方案1】:

你想要的语法是:

group_concat(distinct t.name separator ',') as Products

【讨论】:

  • 它返回一行,它不给出所有产品。
  • 在这种情况下,您的查询需要group by 语句。类似于group by orderid, ordername
【解决方案2】:

我用这个改变了我的问题:

    SELECT op.OrderId,
    O.Number,    
    SUM(op.Price) Price,
    (SELECT CONCAT(A.Detail, ' ',C.Name, ' / ', Ci.Name) FROM kobiakinlar.Address AS A
                INNER JOIN County AS C ON C.CountyId = A.CountyId
                INNER JOIN City AS Ci ON C.CityId = Ci.CityId
                WHERE UserId = O.UserId) AS UserAddress,
   ( SELECT CASE WHEN O.Status =0 THEN 'Onay Bekliyor'  WHEN O.Status =1 THEN 'Onaylandı' WHEN O.Status = 2 THEN 'Reddedildi' END) Status,
    O.Creation,
    ( SELECT CASE WHEN O.IsDelivered =0 THEN 'Teslim Edilmedi' ELSE 'Teslim Edildi' END) IsDelivered,
    group_concat(P.Name) Product
FROM
    kobiakinlar.product P
        JOIN
    kobiakinlar.orderproduct op ON op.ProductId = P.productId
        JOIN
    kobiakinlar.order O ON O.orderId = op.OrderId
   JOIN 
kobiakinlar.address A ON A.addressId = O.AddressId
GROUP BY op.OrderId

【讨论】:

    猜你喜欢
    • 2015-09-11
    • 2016-03-15
    • 2022-10-22
    • 2017-10-11
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多