sql - 查询而不是group by

时间:2015-11-02 07:45:51

标签: sql oracle

在我的学校,我们学习oracle sql developer。 我的任务很简单。 我需要计算同一列中有多少相同的值,例如:

  COLA    COLB    COLC    ....
  A       ...     ...     ....
  A       ...     ...     ....
  A       ...     ...     ....
  B       ...     ...     ....
  B       ...     ...     ....
  C       ...     ...     ....
  C       ...     ...     ....
  D       ...     ...     ....

所以我需要以下信息:A的数量,B的数量和数量。

重要的是我不能使用group by。 我唯一可以使用的是:

selectfromwhereunionintersectminusdistinctcountandorasbetween

现在无法解决这个问题,有什么帮助吗?

4 个答案:

答案 0 :(得分:1)

基本上,你的问题是如何在不使用GROUP BY的情况下实现GROUP BY。

<c:forEach var="row" items="${memberList}">

    <tr>
        <td><c:out value="${row.id}"/> </td>
        <td><c:out value="${row.username}"></c:out> </td>
        <td><c:out value="${row.address}"></c:out> </td>
        <td><c:out value="${row.email}"></c:out> </td>
        <td><c:out value="${row.contact}"></c:out> </td>
        <td></td>
        <td><a href="MemberDetailUpdate.jsp" name="Edit">Edit</a> </td>
    </tr>
</c:forEach>

答案 1 :(得分:1)

以下是使用pairs = MapThread[{#1, #2} &, {l1, l2}] 的解决方案。它假设您只有UNIONA的字母。

D

这将为您提供如下所示的输出表:

SELECT COUNT(COLA) AS theCount, 'A' as theType
From table
WHERE COLA = 'A'
UNION ALL
SELECT COUNT(COLA) AS theCount, 'B' as theType
From table
WHERE COLA = 'B'
UNION ALL
SELECT COUNT(COLA) AS theCount, 'C' as theType
From table
WHERE COLA = 'C'
UNION ALL
SELECT COUNT(COLA) AS theCount, 'D' as theType
From table
WHERE COLA = 'D'

免责声明:如果您只有几种类型的列值,则此解决方案很不错。如果您有一组未知值或大量已知值,则无法实现这一目标。

答案 2 :(得分:1)

我认为你正在寻找重复计数

╔══════════╦═════════╗
║ theCount ║ theType ║
╠══════════╬═════════╣
║     3    ║    A    ║
╠══════════╬═════════╣
║     2    ║    B    ║
╠══════════╬═════════╣
║     2    ║    C    ║
╠══════════╬═════════╣
║     1    ║    D    ║
╚══════════╩═════════╝

答案 3 :(得分:1)

因此,您只需要在不使用group by子句...

的情况下计算值
select distinct cola, cnt
from(  
     select cola, count(*) over (partition by cola) as cnt
     from table
     )

计算分区的事情是analytic function syntax