繁体   English   中英

在 MariaDB/MySQL 中,如何从单行返回的不同记录中检索同一列?

[英]In MariaDB/MySQL, how do I retrieve the same column from different records returned in a single row?

我想检索一行,显示属于特定集合的产品的前三种颜色。 顺序是预定义的,对于某些上下文,我检索顶部颜色的方式如下。 但是我需要在三个不同的字段中但在一行中显示前三种颜色。

SELECT
   color
FROM
   product
WHERE
   category_id = 100
ORDER BY
   FIELD(p.color, 'Red','Orange','Blue','Yellow','Pink','Purple','Brown','Green','Clear','unknown','')
LIMIT 1

我想要最后“LIMIT 3”的效果,但我需要一行,而不是三行。

检索 3 行并将结果与GROUP_CONCAT合并。

SELECT GROUP_CONCAT(color)
FROM (
    SELECT
       DISTINCT color
    FROM
       product
    WHERE
       category_id = 100
    ORDER BY
       FIELD(p.color, 'Red','Orange','Blue','Yellow','Pink','Purple','Brown','Green','Clear','unknown','')
    LIMIT 3
) x

如果您需要它们在结果中的单独列中,您可以将子查询放在SELECT列表中,并使用不同的LIMIT子句。

SELECT (
    SELECT
       DISTINCT color
    FROM
       product
    WHERE
       category_id = 100
    ORDER BY
       FIELD(p.color, 'Red','Orange','Blue','Yellow','Pink','Purple','Brown','Green','Clear','unknown','')
    LIMIT 0, 1) AS first,
    SELECT
       DISTINCT color
    FROM
       product
    WHERE
       category_id = 100
    ORDER BY
       FIELD(p.color, 'Red','Orange','Blue','Yellow','Pink','Purple','Brown','Green','Clear','unknown','')
    LIMIT 1, 1) AS second,
    SELECT
       DISTINCT color
    FROM
       product
    WHERE
       category_id = 100
    ORDER BY
       FIELD(p.color, 'Red','Orange','Blue','Yellow','Pink','Purple','Brown','Green','Clear','unknown','')
    LIMIT 2, 1) AS third

这是你想要的吗?

SELECT GROUP_CONCAT(color ORDER BY cnt DESC) as colors
FROM (SELECT p.color, COUNT(*) as cnt
      FROM product p
      WHERE p.category_id = 100 AND
            p.color IN ('Red', 'Orange', 'Blue', 'Yellow',' Pink', 'Purple', 'Brown', 'Green', 'Clear', 'unknown', '')
      GROUP BY p.color
      ORDER BY COUNT(*) DESC
      LIMIT 3
     ) p;

如果颜色出现一次并且TOP指的是排序,则使用GROUP_CONCAT(ORDER BY :

SELECT GROUP_CONCAT(color ORDER BY FIELD(p.color, 'Red', 'Orange', 'Blue', 'Yellow', 'Pink', 'Purple', 'Brown', 'Green', 'Clear', 'unknown', '')) as colors
FROM product
WHERE category_id = 100;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM