如何在同一过程中使用查询返回的值? (对不起诺布主义)
我正在努力让一些用户以一个最初的开头作为列表 - 即A(4)B(2)c(5)等
SELECT DISTINCT LEFT(last_name, 1) AS initial
FROM users
ORDER BY initial
我如何继续问:
select COUNT(*) as NumTeam
from users
where last_name like initial + '%'
答案 0 :(得分:2)
这肯定适用于SQL Server 2005(我测试过它):
DECLARE @People TABLE (
[id] [int] IDENTITY(1,1) NOT NULL,
[fname] [nvarchar](50) NOT NULL,
[lname] [nvarchar](50) NOT NULL
)
INSERT INTO @People([fname], [lname])
SELECT 'Joseph', 'Adama' UNION ALL
SELECT 'Adam', 'Joseph' UNION ALL
SELECT 'Bryan', 'Adams' UNION ALL
SELECT 'Charlie', 'Brown' UNION ALL
SELECT 'Charles', 'Babbage' UNION ALL
SELECT 'Charles', 'Schultz'
SELECT LEFT(lname, 1) [Letter], COUNT(id) [Count]
FROM @People
GROUP BY LEFT(lname, 1)
ORDER BY LEFT(lname, 1)
它产生结果集:
Letter Count
A 2
B 2
J 1
S 1
答案 1 :(得分:1)
按查询使用分组:
select left(last_name, 1) as initial, count(*) as initial_count
from users
group by left(last_name, 1)
order by left(last_name, 1)
答案 2 :(得分:0)
您可以在GROUP BY
子句中使用initial:
SELECT DISTINCT LEFT(last_name, 1) AS initial, count(1) AS NumTeam
FROM users
GROUP BY initial ORDER BY initial
答案 3 :(得分:0)
回答正确的问题:
mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1 | @t2 | @t3 | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
| 1 | 2 | 4 | 7 |
+------+------+------+--------------------+
这来自http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
要具体回答你的问题,我相信你想要这样的事情:
SELECT LEFT(last_name, 1) AS initial,COUNT(*) as NumTeam FROM users GROUP BY LEFT(last_name, 1)
如果您想按字母顺序输入缩写:
SELECT * FROM(
SELECT LEFT(last_name, 1) AS initial,COUNT(*) as NumTeam FROM users GROUP BY LEFT(last_name, 1)
) as initial_counts order by initial;