2012-03-13 72 views
2

我在用戶表中存儲了「firstname」和「lastname」。在SQL查詢中查找兩列中唯一的第一個字母

我試圖建立一個字母A-Z列表,並知道每個字母是否至少有一個用戶的第一個字母是以該字母開頭。例如,查詢的理想輸出只是A,B,C,D,E,I,O,U,但很高興發佈過程。

我能做到這一點很容易夠上一列:

SELECT COUNT(*), LEFT(firstname, 1) FROM users GROUP BY LEFT(firstname, 1) 

但是這只是一個欄,我想這樣做對兩列。另外,如果有更高效的方式來做到這一點 - 我很想知道。

回答

3

如果你想從兩列數據,你應該使用UNION:

SELECT LEFT(firstname, 1) 
    FROM users 
UNION 
SELECT LEFT(lastname, 1) 
    FROM users 

UNION運算符默認情況下選擇不同的值,所以你不應該需要在SELECT語句中使用DISTINCT。

2

對於組合的數量,試試:

select count(*), letter from 
(select LEFT(firstname, 1) letter from users UNION ALL 
select LEFT(lastname, 1) letter from users) 
group by letter 

對於單獨的罪名,嘗試:

select sum(firstname_count), sum(lastname_count), letter from 
(select LEFT(firstname, 1) letter, 1 firstname_count, 0 lastname_count from users 
UNION ALL 
select LEFT(lastname, 1) letter, 0 firstname_count, 1 lastname_count from users) 
group by letter 
+0

非常感謝;我明白這是如何工作的。我的理想解決方案是避免子查詢,因爲這不會針對索引運行;但如果這是不可能的 - 這將做到這一點。 – 2012-03-13 12:47:57

+0

能在MySQL中做基於函數的索引嗎?如果是這樣的話,在這種情況下可能是值得的。如果不是,那麼添加一個僅存儲第一個初始值的列並通過觸發器更新值可能是值得的。 – 2012-03-13 13:35:42

相關問題