为什么从子查询中访问COUNT字段只返回一个结果?

时间:2016-06-13 00:59:36

标签: mysql sql

我试图解决为什么当我访问这个表时,我得到两种不同的结果:

查询#1 :返回单个结果(我试图获取带有附加SUM列的所有行)

SELECT *, SUM(matches) FROM newtable;

查询#2 :按预期返回所有结果

SELECT * FROM newtable;

表格定义:

CREATE TABLE IF NOT EXISTS newtable (pattern TEXT, matches INT);

INSERT INTO newtable
SELECT pattern, COUNT(*) AS matches
FROM (SELECT pattern FROM cl_ra_30 WHERE id IN
(SELECT CASE WHEN id = id THEN id + 1 END AS id FROM cl_ra_30 WHERE pattern = '2_1_4_True')) AS K
GROUP BY pattern HAVING matches > 1 ORDER BY matches DESC;

1 个答案:

答案 0 :(得分:1)

这是您的查询(使用表别名和限定列名称):

public void MergeLists(List<Deliverable> a, List<Deliverable> b)
{
    int largeArrayCount = a.Count;
    int currentBIndex = 0;
    List<Deliverable> FinalResult = new List<Deliverable>();
    for (int i = 0; i < largeArrayCount; i++)
    {
        if (i < b.Count)
        {
            if (a[i].ID >= b[i].ID)
            {
                // Add All elements of B Which is smaller than current element of A
                while (a[i].ID <= b[currentBIndex].ID)
                {
                    FinalResult.Add(b[currentBIndex++]);
                }
            }
            else
            {
                FinalResult.Add(a[i]);
            }
        }
        else
        {
            // No more elements in b so no need for checking
            FinalResult.Add(a[i]);
        }
    }
}

由于select t.*, sum(t.matches) from newtable t; 功能,这是一个聚合查询。通常,聚合查询具有sum()子句,指定聚合组。在这种情况下,没有group by,因此SQL指定只返回一行,其中所有行都在同一组中。

在大多数数据库中,此查询将返回错误。 MySQL允许这个构造,从不确定的行中选择非聚合列的值。

获得所需内容的最佳方式可能是使用子查询:

group by

在其他数据库中,您只需使用窗口函数:

select t.*, tt.summatches
from newtable t cross join
     (select sum(t.matches) as summatches from newtable t) tt;

但MySQL(尚未)支持窗口函数。