2016-07-21 81 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'都不是一個函數。 –