MySQL-仅选择一条匹配记录
我有一个表,它的主键是4列的组合,比如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)、最
列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可能不起作用。请稍稍修改您的解决方案作为回答。请考虑删除这个答案,因为它不符合实际提出的问题。请考虑删除这个答案,因为它不符合实际提出的问题。