【问题标题】:Combine GROUP BY and LIKE SQL组合 GROUP BY 和 LIKE SQL
【发布时间】:2015-10-07 06:51:56
【问题描述】:

我的目标是在第二列显示具有 20+ 值的状态.. 目前我已经能够显示状态和值,但我需要组合相似的状态和它们的值(例如 VIC 和 Vic 和 vic 应该等于 VIC 68)。 我也只想显示状态,而不是它们的值,而是值不断显示。我猜它使用 LIKE 与 GROUP BY 结合,但我不知道如何。

我当前的 SQL 查询:

SELECT DEPARTMENT.STATE, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY DEPARTMENT.STATE;

输出:

STATE COUNT(ACADEMIC.DEPTNUM)
----- -----------------------
NSW                        82 
                            7 
QLD                        21 
VIC                        14 
vic                         1 
WA                         42 
Tas                         1 
SA                         40 
Qld                        55 
Vic                        53 
ACT                        35 
TAS                         8 

我不知道该怎么做,有人可以帮忙吗?

【问题讨论】:

标签: sql oracle join count group-by


【解决方案1】:
SELECT DEPARTMENT.STATE, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY DEPARTMENT.STATE
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;

使用HAVING 仅返回计数为 20+ 的行。

要处理不同的情况,请在所有状态下执行UPPER

SELECT UPPER(DEPARTMENT.STATE), COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY UPPER(DEPARTMENT.STATE)
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;

【讨论】:

  • 但这也显示了包含数量的第二列。有没有办法做到这一点,但只显示状态?
  • 只需从选择列表中删除“, COUNT(ACADEMIC.DEPTNUM) FROM ACADEMIC”! (即选择 DEPARTMENT.STATE。)
  • @james 但是您的要求不同,您想总结相似状态的计数。为此,您需要 SUM。
  • @james,等一下,刚刚注意到上/下问题。很快就会编辑。
【解决方案2】:

我需要组合相似的状态及其值(例如 VIC 和 Vic 和 vic 应该等于 VIC 68)

您需要在子查询中使用 SUMGROUP BY(UPPER/LOWER) 或简单地在子查询中使用 UPPER/LOWER原始查询中的 GROUP BY 表达式。

例如,

SQL> with data as(
  2  select 'VIC' state, 14 cnt from dual union all
  3  select 'vic' state, 1  cnt from dual union all
  4  select 'Vic' state, 53  cnt from dual
  5  )
  6  select upper(state), sum(cnt) count
  7  from data
  8  group by upper(state);

UPP      COUNT
--- ----------
VIC         68

由于您已经有了给您计数的子查询,您只需要在 GROUP BY 中使用 UPPER/LOWER,这样 count现在会考虑类似的状态

SELECT UPPER(DEPARTMENT.STATE) AS "STATE"
FROM ACADEMIC
JOIN DEPARTMENT
ON DEPARTMENT.DEPTNUM=ACADEMIC.DEPTNUM
GROUP BY UPPER(DEPARTMENT.STATE)
HAVING COUNT(ACADEMIC.DEPTNUM) >= 20;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2015-04-06
    • 2021-06-25
    • 1970-01-01
    • 2014-12-27
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多