我以前使用过这种查询结构,但由于某种原因,它使我感到震惊。

因此,我有一个名为用户的表,其中所有用户都绑定到KeyID。有些用户创建了密码-有些则没有。我想按管理员显示每个是否有创建密码的用户。我不想列出每个管理员的所有用户-即使有任何创建密码的用户。

我最想念的是什么?

CREATE TABLE test_output (
`UserID` INT(11) NOT NULL AUTO_INCREMENT,
`KeyID` INT(11) DEFAULT NULL,
`Password` VARCHAR(200) DEFAULT NULL,
PRIMARY KEY (`UserID`),
KEY `KeyID` (`KeyID`)
);

INSERT INTO test_output (KeyID,`Password`) VALUES
(1,NULL),
(1,'hello'),
(2,NULL),
(2,'hello2');
(3,NULL);

SELECT *
FROM (
    SELECT *
    FROM `test_output`
    ORDER BY `Password` DESC
) testout
GROUP BY KeyID;

最佳答案

如果要使用密码获取用户,请使用:

SELECT *
FROM `test_output` t
WHERE Password IS NOT NULL;


如果要使用每个管理员密码的用户列表:

SELECT KeyId, GROUP_CONCAT(UserId) as UsersWithPasswords
FROM `test_output` t
WHERE Password IS NOT NULL
GROUP BY KeyId;


如果您希望每个管理员使用密码的用户数量:

SELECT KeyId, MAX(Password IS NOT NULL) as NumUsersWithPasswords
FROM `test_output` t
GROUP BY KeyId;

10-05 19:59