Sql 如何使用having子句获取两列
我的数据表是:Sql 如何使用having子句获取两列,sql,Sql,我的数据表是: code -------- ABCD0000 AAAA0000 BBBB0000 CCCC0000 DDDD0001 假设我要查找具有相同端点编号的代码列表等于4, 它应该会回来 substring|substring ---------|--------- ABCD 0000 AAAA 0000 BBBB 0000 CCCC 0000 我的sql代码是 SELECT SUBSTRING(subjects.code ,5, 8), S
code
--------
ABCD0000
AAAA0000
BBBB0000
CCCC0000
DDDD0001
假设我要查找具有相同端点编号的代码列表等于4,
它应该会回来
substring|substring
---------|---------
ABCD 0000
AAAA 0000
BBBB 0000
CCCC 0000
我的sql代码是
SELECT SUBSTRING(subjects.code ,5, 8), SUBSTRING(subjects.code ,1, 4)
FROM subjects
HAVING count(SUBSTRING(subjects.code ,5, 8)) = 8;
它引起的错误如下:
列“subjects.code”必须出现在GROUP BY子句中,或在聚合函数中使用
但是如果我将其添加到查询中,它将不返回任何内容我想您需要这样的内容(): 创建并填充表格:
CREATE TABLE subjects
(
code VARCHAR (20) NOT NULL
);
INSERT INTO subjects VALUES ('ABCD0000'), ('AAAA0000'), ('BBBB0000'), ('CCCC0000'), ('DDDD0001');
然后运行premialSQL:
SELECT
SUBSTRING (code, 5, 8) AS codes4,
COUNT(SUBSTRING (code, 5, 8)) AS cnt
FROM subjects
GROUP BY codes4
HAVING COUNT(SUBSTRING (code, 5, 8)) = 4
结果:
codes4 cnt
0000 4
prefix codes4
ABCD 0000
AAAA 0000
BBBB 0000
CCCC 0000
然后JOIN
将此结果返回到原始表:
SELECT
SUBSTRING (code, 1, 4) AS prefix,
SUBSTRING (code, 5, 8) AS codes4
FROM subjects s
JOIN
(
SELECT
SUBSTRING (code, 5, 8) AS codes4, COUNT(SUBSTRING (code, 5, 8)) AS cnt
FROM subjects
GROUP BY codes4
HAVING COUNT(SUBSTRING (code, 5, 8)) = 4
) AS t
ON SUBSTRING(s.code, 5, 8) = t.codes4;
结果:
codes4 cnt
0000 4
prefix codes4
ABCD 0000
AAAA 0000
BBBB 0000
CCCC 0000
瞧!p、 欢迎来到论坛!:-) 使用
如果RDBMS支持窗口函数,则无需加入即可完成此操作。只需在子查询中进行窗口计数,然后在外部查询中进行筛选:
select prefix, code
from (
select
substring (code, 1, 4) prefix,
substring (code, 5, 8) code,
count(*) over(partition by substring(code, 5, 8)) cnt
from mytable
) t
where cnt = 4
:
prefix | code
:----- | :---
ABCD | 0000
AAAA | 0000
BBBB | 0000
CCCC | 0000
前缀代码
:----- | :---
ABCD | 0000
AAAA | 0000
BBBB | 0000
中交| 0000
在
之前添加GROUP BY
子句,使具有与SELECT
相同的列。它仍然不返回任何内容,substring | substring-----------+-------------(0行)您使用的是哪种产品?“SQL”只是一种查询语言,而不是特定数据库产品的名称。请查看您正在使用的数据库产品的详细信息