我以前使用过这种查询结构,但由于某种原因,它使我感到震惊。
因此,我有一个名为用户的表,其中所有用户都绑定到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;