繁体   English   中英

跨列的SQL计数

[英]SQL Count across columns

我知道这个表结构太可怕了,我应该研究数据库规范化,但这是我现在必须要处理的。

我需要其中一个具有特定ID 的列中找到最通用的数字(在我的示例3 )。 两列永远不会具有相同的值。

询问

SELECT Col1, Col2 FROM scores WHERE Col1 = 3 OR Col2 = 3

结果

+------+------+
| Col1 | Col2 |
+------+------+
|    1 |    3 |
|    3 |    1 |
|    2 |    3 |
|    6 |    3 |
|    3 |    7 |
|    3 |    9 |
|    2 |    3 |
|    5 |    3 |
+------+------+

我希望得到这样的结果(因为ID是ID,所以我不需要计数3,但是可以包含在内)

+-------+-------+
| Value | Count |
+-------+-------+
|     1 |     2 |
|     2 |     2 |
|     5 |     1 |
|     6 |     1 |
|     7 |     1 |
|     9 |     1 |
+-------+-------+

我已经尝试了一些事情,例如UNION和嵌套SELECT但这似乎并不能解决这个问题。

有什么建议么?

如果要对OTHER列为3的值进行计数,那么UNION将像这样工作:

SELECT value, theCount = COUNT(*)
FROM (
    SELECT value = col1
    FROM scores
    WHERE col2 = 3
    UNION ALL
    SELECT col2
    FROM scores
    WHERE col1 = 3) T
GROUP BY value
ORDER BY value;

一种方式是使用案例:

SELECT 
  case Col1 when 3 then Col2 else Col1 end,
  count(*) 
FROM scores 
WHERE Col1 = 3 OR Col2 = 3
Group by
  case Col1 when 3 then Col2 else Col1 end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM