2016-07-21 55 views
0

我之前使用过这种查询结构,但由于某种原因,这一个是打我。别名表组和订单

所以我有一个名为用户的表,所有用户都绑定到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

你的表结构是什么? – Abhay

+0

我已更新问题:) – uk2016

+1

根据一些示例输入更好地显示您的预期输出。我认为你的预期产出会很笨拙。 – 1000111

回答

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; 
+0

谢谢戈登。我需要查看每个KeyID,如果用户有密码显示,则不显示任何内容(空密码)。 – uk2016

0

这正是我后...

SELECT * 
FROM (
    SELECT DISTINCT(KeyID) AS ki, tou.* 
    FROM test_output tou 
    ORDER BY `Password` DESC 
) u2 

GROUP BY u2.KeyID 

这是在别名表选择不同是什么固定它。

+0

什么是'选择不同(keyid)作为ki,tou。*'应该这样做?在我意识到的任何数据库中,'distinct'都不是一个函数。 –