Oracle SQL-组和详细信息记录
我正在尝试构建一个Oracle SQL查询,当计数大于1时,它将为我提供按行分组的查询以及组成组的行。请参见下面的示例和进行分组的SQL查询。如有任何帮助或建议,将不胜感激 例如,使用以下数据集-Oracle SQL-组和详细信息记录,sql,oracle,Sql,Oracle,我正在尝试构建一个Oracle SQL查询,当计数大于1时,它将为我提供按行分组的查询以及组成组的行。请参见下面的示例和进行分组的SQL查询。如有任何帮助或建议,将不胜感激 例如,使用以下数据集- ====================== ID | NAME | AUTHOR ====================== 2 | Abc | John 6 | Abc | John 3 | Xyz | Mike 4 | Abc | Mike 5 | Xy
======================
ID | NAME | AUTHOR
======================
2 | Abc | John
6 | Abc | John
3 | Xyz | Mike
4 | Abc | Mike
5 | Xyz | John
1 | Abc | Mike
7 | PQR | Raj
Expected Result -
===========================
ID | NAME | AUTHOR | COUNT
===========================
| Abc | | 4
2 | Abc | John |
6 | Abc | John |
4 | Abc | Mike |
1 | Abc | Mike |
| PQR | | 1
| Xyz | | 2
3 | Xyz | Mike |
5 | Xyz | John |
SELECT NAME, COUNT(NAME) from (
SELECT 2 as ID, ' Abc ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION
SELECT 6 as ID, ' Abc ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION
SELECT 3 as ID, ' Xyz ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 4 as ID, ' Abc ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 5 as ID, ' Xyz ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION
SELECT 1 as ID, ' Abc ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 7 as ID, ' PQR ' as NAME, ' Raj ' as AUTHOR FROM DUAL)
GROUP BY NAME
ORDER by NAME;
按姓名和作者计数分组的数据:
SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
当有多个作者时,再加上详细信息:
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
把它们放在一起,稍微整理一下,得到想要的结果
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
UNION ALL
SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
ORDER BY 2, 4, 1, 3
对不起,我不明白。为什么要从一个包含字段的表中选择固定数据(如ID为2,名称为abc等)?为什么是工会?返回不同名称和计数的查询很容易完成,我可以帮助您完成这一点,但其余的我不理解。请澄清。您正在进行多个表格扫描,因此我确信这是最佳选择。
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
UNION ALL
SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
ORDER BY 2, 4, 1, 3