[英]MySql Distinct for same columns
嗨,伙计们,我有来自 sql 的数据,例如
UserID UserInfo ImageName Point
159 Ozan Işık 1575972330250.jpeg 32
558 Mert Malaveş 1578248740672.jpeg 36
68 Egemen Yılmaz 1573696212462.jpeg 82
558 Mert Malaveş 1578248740678.jpeg 36
这是我的 sql
SELECT DISTINCT Users.UserID,Users.UserInfo,BestPracticeParticipant.ImageName ,BestPracticeParticipant.Point
FROM BestPracticeParticipant
JOIN Users on Users.UserID=BestPracticeParticipant.UserID
WHERE BestPracticeParticipant.BestPracticeID=1
但我需要这样的数据
UserID UserInfo ImageName Point
159 Ozan Işık 1575972330250.jpeg 32
558 Mert Malaveş 1578248740672.jpeg 36
68 Egemen Yılmaz 1573696212462.jpeg 82
我需要相同的 UserID 行不重复,但由于来自我的 sql 的其他验证,我无法分组。
谢谢你。
如果你想要一个随机匹配的行,你可以使用row_number()
:
SELECT u.*
FROM (SELECT u.UserID, u.UserInfo, bpp.ImageName, bpp.Point,
ROW_NUMBER() OVER (PARTITION BY u.UserID ORDER BY rand()) as seqnum
FROM BestPracticeParticipant bpp JOIN
Users u
ON u.UserID = bpp.UserID
WHERE bpp.BestPracticeID = 1
) u
WHERE seqnum = 1;
注意:您可以通过修改ROW_NUMBER()
来控制获得哪一行。
编辑:以上适用于 MySQL 8+。 如果您有旧版本,则结果集中的唯一 ID 可用于执行您想要的操作。
例如,如果ImageName
是唯一的(对于给定用户):
SELECT u.UserID, u.UserInfo, bpp.ImageName, bpp.Point
FROM useres u JOIN
BestPracticeParticipant bpp
ON u.UserID = bpp.UserID
WHERE bpp.BestPracticeID = 1 AND
bpp.ImageName = (SELECT MAX(bpp2.ImageName)
FROM BestPracticeParticipant bpp2
WHERE bpp2.UserID = bpp.UserID AND
bpp2.BestPracticeID = 1
);
您的 MySQL 版本似乎不支持窗口函数。 因此,从您的示例数据中,您可以尝试以下查询 -
SELECT DISTINCT U.UserID,U.UserInfo,BPP.ImageName,BPP.Point
FROM (SELECT UserID, MIN(ImageName), Point
FROM BestPracticeParticipant
GROUP BY UserID, Point) BPP
JOIN Users U on U.UserID=BPP.UserID
WHERE BPP.BestPracticeID=1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.