简体   繁体   English

相同列的 MySql 不同

[英]MySql Distinct for same columns

hi guys i have a data from sql like嗨,伙计们,我有来自 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

Here is my sql这是我的 sql

SELECT DISTINCT Users.UserID,Users.UserInfo,BestPracticeParticipant.ImageName    ,BestPracticeParticipant.Point 
FROM BestPracticeParticipant
    JOIN Users on Users.UserID=BestPracticeParticipant.UserID
    WHERE BestPracticeParticipant.BestPracticeID=1

But i need to data like this但我需要这样的数据

UserID   UserInfo       ImageName           Point   
159      Ozan Işık      1575972330250.jpeg  32
558      Mert Malaveş   1578248740672.jpeg  36
68       Egemen Yılmaz  1573696212462.jpeg  82

i need same UserID rows doesnt duplicate but i cant group by because of the other veriables from my sql.我需要相同的 UserID 行不重复,但由于来自我的 sql 的其他验证,我无法分组。

Thank you.谢谢你。

If you want a random matching row, you can use row_number() :如果你想要一个随机匹配的行,你可以使用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;

Note: You can control which row you get by modifying the ROW_NUMBER() .注意:您可以通过修改ROW_NUMBER()来控制获得哪一行。

EDIT: The above works on MySQL 8+.编辑:以上适用于 MySQL 8+。 If you have an older version, then a unique id in the result set can be used to do what you want.如果您有旧版本,则结果集中的唯一 ID 可用于执行您想要的操作。

For instance, if ImageName is unique (for a given user):例如,如果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
                     );

It seems your MySQL version doesn't support window functions.您的 MySQL 版本似乎不支持窗口函数。 So from your sample data, You may try below query -因此,从您的示例数据中,您可以尝试以下查询 -

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.

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