SQL:如何查找具有特定值的最大数量的行

时间:2017-12-03 11:18:24

标签: mysql sql sql-server row

我需要在此特定表中找到包含最多行的行。 该表看起来像那样,我的输出显示在给定的表上方。

Table and the desired output

我还不熟悉sql所以也许这很容易解决,但到目前为止我还没有得到任何解决方案。

有没有办法说请搜索一个特定的值并将找到的值加起来,输出应该在一个额外的列中给出?

3 个答案:

答案 0 :(得分:2)

看起来非常基本的东西...希望这会有所帮助:

SELECT X.*,
       CASE WHEN X.A=1 THEN 1 ELSE 0 END +
       CASE WHEN X.B=1 THEN 1 ELSE 0 END +
       CASE WHEN X.C=1 THEN 1 ELSE 0 END +
       CASE WHEN X.D=1 THEN 1 ELSE 0 END +
       CASE WHEN X.E=1 THEN 1 ELSE 0 END +
       CASE WHEN X.F=1 THEN 1 ELSE 0 END AS SUM_ONES  
FROM   X;

答案 1 :(得分:0)

假设您的列数据类型是数字,您可以使用:

SELECT 
  CASE WHEN col1 = 1 THEN '*' ELSE '' END || 
  CASE WHEN col2 = 1 THEN '*' ELSE '' END ||
  ...
  AS RowValueSearchString

然后在RowValueSearchString上使用LEN / CHAR_LENGTH函数(取决于你拥有的任何数据库)来查找上面字符串的长度。连接字符串的长度将为您提供在行中查找的值的出现次数。

答案 2 :(得分:0)

如果您使用的是SQL Server 2012+,则可以使用CASEIIF

CREATE TABLE X (
    A INT,
    B INT,
    C INT,
    D INT,
    E INT,
    F INT
    );

INSERT INTO X VALUES
(1, 0, 0, 1, 0, 1),
(2, 0, 1, 2, 1, 0),
(1, 0, 1, 0, 1, 0);

SELECT X.*,
       IIF(A = 1, A, 0) +
       IIF(B = 1, B, 0) +
       IIF(C = 1, C, 0) +
       IIF(D = 1, D, 0) +
       IIF(E = 1, E, 0) +
       IIF(F = 1, F, 0) AS [Σ]  
FROM X;

结果:

+---+---+---+---+---+---+---+
| A | B | C | D | E | F | Σ |
+---+---+---+---+---+---+---+
| 1 | 0 | 0 | 1 | 0 | 1 | 3 |
| 2 | 0 | 1 | 2 | 1 | 0 | 2 |
| 1 | 0 | 1 | 0 | 1 | 0 | 3 |
+---+---+---+---+---+---+---+