繁体   English   中英

SQL中每组N个项目|| SQL 子查询限制

[英]SQL N items per Group in SQL || SQL Sub Query Limit

我想选择与带有data cats表连接。 加入cats.id = data.cat_id 每个唯一类别 id cat.id限制 3 个data表行

表: cats

id | parent_id | name
---+-----------+--------
1  | 0         | Games
2  | 0         | Music
3  | 0         | Apps

表: data

--------------------------
id |  cat_id |  data
---+---------+------------
1  |  1      |  Cat1 Data1
2  |  1      |  Cat1 Data2
3  |  1      |  Cat1 Data3
4  |  1      |  Cat1 Data4
---+---------+------------
5  |  2      |  Cat2 Data1
6  |  2      |  Cat2 Data2
7  |  2      |  Cat2 Data3
8  |  2      |  Cat3 Data4
---+---------+------------
9  |  3      |  Cat3 Data1
10 |  3      |  Cat3 Data2
11 |  3      |  Cat3 Data3
12 |  3      |  Cat3 Data4

我想要像下面这样。 对于每行一只cats ,选择三个data行选择。

category  | data
----------+------------
Games     | Cat1 Data1
Games     | Cat1 Data2
Games     | Cat1 Data3
----------+------------
Music     | Cat2 Data1
Music     | Cat2 Data2
Music     | Cat2 Data3
----------+------------
Apps      | Cat3 Data1
Apps      | Cat3 Data2
Apps      | Cat3 Data3

如果这不是 posiable group_concat with ,也适用于我。 我将用 php 拆分它。

cat_name  |  data
----------+-------------------------------------
Book      | Cat1 Data1, Cat1 Data2, Cat1 Data3
Music     | Cat2 Data1, Cat2 Data2, Cat2 Data3
Game      | Cat3 Data1, Cat3 Data2, Cat3 Data3

希望这能解决您的

SELECT
    sq.category,
    sq.data
FROM (
    SELECT
        DATA.*,
        cats.name AS category,
        row_number() over(PARTITION BY cat_id ORDER BY cat_id DESC) AS ROW_COUNT FROM `data`
    INNER JOIN cats ON data.cat_id = cats.id
    ) AS sq
WHERE
    ROW_COUNT <= 3

这里在查询中...... ROW_COUNT <= 3您可以设置选择限制。

暂无
暂无

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

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