之前我使用过这种查询结构,但出于某种原因,这个结果正在打败我。
所以我有一个名为users的表,其中所有用户都绑定到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;
答案 0 :(得分:0)
如果您想让用户获得密码,请使用:
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;
答案 1 :(得分:0)
这就是我追求的......
SELECT *
FROM (
SELECT DISTINCT(KeyID) AS ki, tou.*
FROM test_output tou
ORDER BY `Password` DESC
) u2
GROUP BY u2.KeyID
别名表上的select distinct是修正它的原因。