Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-仅选择一条匹配记录_Mysql - Fatal编程技术网

MySQL-仅选择一条匹配记录

MySQL-仅选择一条匹配记录,mysql,Mysql,我有一个表,它的主键是4列的组合,比如列1、列2、列3、列4。此表中的某些记录对于相同的值组合具有多个值。我想编写一个SQL查询,以便使用任意一个随机列3和列4组合选择不同的列1和列2组合 例如: 桌子 我希望输出是 column_1_value_1 column_2_value_1 2000 america column_1_value_2 column_2_value_2 3000 asia 或 我尝试了查询从表组中按列1、列2选择列1、列2、最大值(列3)、最

我有一个表,它的主键是4列的组合,比如
列1、列2、列3、列4
。此表中的某些记录对于相同的
值组合具有多个值。我想编写一个SQL查询,以便使用任意一个随机列3和列4组合选择不同的列1和列2组合

例如: 桌子

我希望输出是

column_1_value_1  column_2_value_1  2000      america
column_1_value_2  column_2_value_2  3000      asia

我尝试了查询
从表组中按列1、列2选择列1、列2、最大值(列3)、最大值(列4),但这提供了输出:

column_1_value_1  column_2_value_1  2000      europe
column_1_value_2  column_2_value_2  3000      asia
此输出不正确,因为列_3值
2000
与列_4值
europe
不匹配


有人能帮我根据我的要求制定查询吗?

我们可以在这里使用
行数
作为MySQL 8+选项:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY column_1, column_2 ORDER BY RAND()) rn
    FROM yourTable
)

SELECT column_1, column_2, column_3, column_4
FROM cte
WHERE rn = 1;
涉及连接并避免分析函数的解决方案可能如下所示:

SELECT t1.column_1, t1.column_2, t1.column_3, t1.column_4
FROM yourTable t1
INNER JOIN
(
    SELECT column_1, column_2, MAX(column_3) AS max_column_3
    FROM yourTable
    GROUP BY column_1, column_2
) t2
    ON t1.column_1 = t2.column_1 AND
       t1.column_2 = t2.column_2 AND
       t1.column_3 = t2.max_column_3;

第二种方法任意选择
(column_1,column_2)
单个记录作为
column_3

值最高的记录,我们可以在这里使用
行数
作为MySQL 8+选项:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY column_1, column_2 ORDER BY RAND()) rn
    FROM yourTable
)

SELECT column_1, column_2, column_3, column_4
FROM cte
WHERE rn = 1;
涉及连接并避免分析函数的解决方案可能如下所示:

SELECT t1.column_1, t1.column_2, t1.column_3, t1.column_4
FROM yourTable t1
INNER JOIN
(
    SELECT column_1, column_2, MAX(column_3) AS max_column_3
    FROM yourTable
    GROUP BY column_1, column_2
) t2
    ON t1.column_1 = t2.column_1 AND
       t1.column_2 = t2.column_2 AND
       t1.column_3 = t2.max_column_3;

第二种方法任意选择
(column_1,column_2)
单个记录作为
column_3

对Tim发布的答案几乎没有修改的记录

SELECT t1.column_1, t1.column_2, t1.column_3, max(t1.column_4)
FROM yourTable t1
INNER JOIN
(
    SELECT column_1, column_2, MAX(column_3) AS max_column_3
    FROM yourTable
    GROUP BY column_1, column_2
) t2
    ON t1.column_1 = t2.column_1 AND
       t1.column_2 = t2.column_2 AND
       t1.column_3 = t2.max_column_3
    GROUP BY t1.column_1, t1.column_2, t1.column_3;

对蒂姆发布的答案稍加修改

SELECT t1.column_1, t1.column_2, t1.column_3, max(t1.column_4)
FROM yourTable t1
INNER JOIN
(
    SELECT column_1, column_2, MAX(column_3) AS max_column_3
    FROM yourTable
    GROUP BY column_1, column_2
) t2
    ON t1.column_1 = t2.column_1 AND
       t1.column_2 = t2.column_2 AND
       t1.column_3 = t2.max_column_3
    GROUP BY t1.column_1, t1.column_2, t1.column_3;

“从
表_名称中选择*
按列_1、列_2分组”列_3和列_4使用max的原因以及具体要求。我只是启动上面的查询,它的输出是您想要的。max与从列中获取随机值一样好,所以我使用max.@bhargavkatakpara您选择的是所有列,但仅按所选列进行分组。在我看来,这在概念上是不正确的,@sagar明白了你的意思。“从
表_名称中选择*按列_1、列_2分组”为什么在列_3和列_4中使用max,这是有具体要求的。我只是启动上面的查询,它的输出是您想要的。max与从列中获取随机值一样好,所以我使用max.@bhargavkatakpara您选择的是所有列,但仅按所选列进行分组。我认为这在概念上是不正确的,@sagar明白你的意思了。谢谢你的回复。你能给我一个简单的SQL语法解决方案吗?如果它涉及表与其自身的连接,我可以检查更新的答案,这与您最初尝试做的是一致的。我刚刚意识到,如果有多条记录具有相同的值,则列1、列2、列3可能不起作用。对您的解决方案进行了一些修改,作为回复。谢谢您的回复。你能给我一个简单的SQL语法解决方案吗?如果它涉及表与其自身的连接,我可以检查更新的答案,这与您最初尝试做的是一致的。我刚刚意识到,如果有多条记录具有相同的值,则列1、列2、列3可能不起作用。请稍稍修改您的解决方案作为回答。请考虑删除这个答案,因为它不符合实际提出的问题。请考虑删除这个答案,因为它不符合实际提出的问题。