别名表组和顺序依据

时间:2016-07-21 10:43:50

标签: mysql sql

之前我使用过这种查询结构,但出于某种原因,这个结果正在打败我。

所以我有一个名为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;

2 个答案:

答案 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是修正它的原因。