我正在尝试编写一个查询,根据另一列的x和y行值返回列的选定行。
但是,即使我已经指定了一个范围,以下查询也会返回两个所选列的所有行。谁能告诉我我在做什么?
select username, password
from loginuser
group by username, password
having count(id) between '1' and '2'
答案 0 :(得分:2)
HAVING
运算符将应用于聚合函数 - 如果您要选择SUM
超过某个值或某些值的行。
您只需要定期选择 - 使用WHERE
子句:
SELECT username, password
FROM dbo.loginuser
WHERE id BETWEEN 1 and 2
这将选择ID
的值介于1和2之间的所有行。
如果您想按行号选择,按ID排序 - 您需要这样的内容:
;WITH RowNumberValues AS
(
SELECT username, password,
ROW_NUMBER() OVER(ORDER BY ID) AS 'RowNum'
FROM dbo.loginuser
)
SELECT username, password
FROM RowNumberValues
WHERE RowNum BETWEEN 1 AND 2
如果您的查询中没有SUM
或COUNT
,则您不应该使用GROUP BY
...
这就是你要找的东西吗?根据您的问题和疑问,您并不完全清楚您真正想要的是什么......您能更详细地描述您想要选择的'吗?
答案 1 :(得分:1)
select username, password
from loginuser
group by username, password
having count(id) between '1' and '2'
注意:COUNT()返回一个int。 SQL Server将转换您的引用的(下次,请不要)'1' and '2'
并将它们设为整数值1 and 2
。
查询意味着:
username
,password
并计算count(id)
,即使用该SAME用户名和密码的行数前两个不同的用户名和密码组合,没有特别的顺序?
select TOP 2 username, password
from loginuser
group by username, password
表loginuser中每个不同用户名+密码组合的最新两行? (您需要PARTITION BY
子句)
select username, password
from
(
select *, rn=row_number() over (
partition by username, password order by id desc)
from loginuser
) X
WHERE rn between 1 and 2