Sql 返回列1中只出现一次的值的查询

Sql 返回列1中只出现一次的值的查询,sql,database,plsql,Sql,Database,Plsql,让我们有一张这样的桌子: |---------------------|------------------| | column1 | column2 | |---------------------|------------------| | A | 1234 | |---------------------|------------------| | A

让我们有一张这样的桌子:

|---------------------|------------------|
|      column1        |     column2      |
|---------------------|------------------|
|          A          |         1234     |
|---------------------|------------------|
|          A          |         6666     |
|---------------------|------------------|
|          A          |         7777     |
|---------------------|------------------|
|          B          |         1234     |
|---------------------|------------------|
|          B          |         6666     |
|---------------------|------------------|
|          C          |         6666     |
|---------------------|------------------|
|          D          |         1234     |
|---------------------|------------------|
WITH MY_TABLE AS(
  SELECT 'A' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 7777 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'C' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'D' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL
)
SELECT    COLUMN1 
FROM      MY_TABLE
GROUP BY  COLUMN1
HAVING    COUNT(COLUMN1) < 2;
我想要一个返回C和D的查询

我需要一个查询,该查询返回column1中的值,这些值在我只有一次编辑之后出现的次数少于2次

我正在使用plSQL

我试过这个:

SELECT * 
FROM myTable
GROUP BY columnNeeded
HAVING COUNT(*) < 2;
尝试使用不同的:

SELECT column1 
FROM myTable
GROUP BY column1
HAVING COUNT(column1) < 2;
尝试使用不同的:

SELECT column1 
FROM myTable
GROUP BY column1
HAVING COUNT(column1) < 2;
select中的列列表应与GROUP BY中的列列表匹配,在GROUP BY中指定单个列时,不应使用*,否则需要指定GROUP BY子句中的所有列

select中的列列表应与GROUP BY中的列列表匹配,在GROUP BY中指定单个列时,不应使用*,否则需要指定GROUP BY子句中的所有列

使用CTE

输出

column1 column2
C       6666
D       1234
SQL FIDLE:

使用CTE

输出

column1 column2
C       6666
D       1234

SQL FIDLE:

您的查询很好,但是您不能只选择GROUPBY子句中出现的所有列,除非。。。。因此,您需要在任何情况下都是唯一的maxcolumn2:

SELECT columnNeeded, max(column2)
FROM myTable
GROUP BY columnNeeded
HAVING COUNT(*) = 1;

您的查询很好,但不能仅选择GROUPBY子句中显示的所有列,除非。。。。因此,您需要在任何情况下都是唯一的maxcolumn2:

SELECT columnNeeded, max(column2)
FROM myTable
GROUP BY columnNeeded
HAVING COUNT(*) = 1;

您只需按column1分组,然后使用having子句过滤结果,如下所示:

|---------------------|------------------|
|      column1        |     column2      |
|---------------------|------------------|
|          A          |         1234     |
|---------------------|------------------|
|          A          |         6666     |
|---------------------|------------------|
|          A          |         7777     |
|---------------------|------------------|
|          B          |         1234     |
|---------------------|------------------|
|          B          |         6666     |
|---------------------|------------------|
|          C          |         6666     |
|---------------------|------------------|
|          D          |         1234     |
|---------------------|------------------|
WITH MY_TABLE AS(
  SELECT 'A' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 7777 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'C' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'D' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL
)
SELECT    COLUMN1 
FROM      MY_TABLE
GROUP BY  COLUMN1
HAVING    COUNT(COLUMN1) < 2;

您只需按column1分组,然后使用having子句过滤结果,如下所示:

|---------------------|------------------|
|      column1        |     column2      |
|---------------------|------------------|
|          A          |         1234     |
|---------------------|------------------|
|          A          |         6666     |
|---------------------|------------------|
|          A          |         7777     |
|---------------------|------------------|
|          B          |         1234     |
|---------------------|------------------|
|          B          |         6666     |
|---------------------|------------------|
|          C          |         6666     |
|---------------------|------------------|
|          D          |         1234     |
|---------------------|------------------|
WITH MY_TABLE AS(
  SELECT 'A' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'A' AS COLUMN1, 7777 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'B' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'C' AS COLUMN1, 6666 AS COLUMN2 FROM DUAL UNION ALL
  SELECT 'D' AS COLUMN1, 1234 AS COLUMN2 FROM DUAL
)
SELECT    COLUMN1 
FROM      MY_TABLE
GROUP BY  COLUMN1
HAVING    COUNT(COLUMN1) < 2;

谢谢你的快速回答,但当我跑步时,结果是:不是一组表情谢谢你的快速回答,但当我跑步时,结果是:不是一组表情你不需要CTE;您可以使用MaxColumn2这是一个替代答案,它消除了分组依据的需要,您不需要使用分组依据;您可以使用MaxColumn2这是一个替代答案,它消除了分组依据的需要,您不需要使用分组依据。您的答案与下面@apomene发布的答案有什么不同。在你投稿之前,你是否阅读了所有答案。你的答案与@apomene在下面发布的答案有什么不同。你在投稿前读了所有的答案吗。