我试图解决为什么当我访问这个表时,我得到两种不同的结果:
查询#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;
答案 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(尚未)支持窗口函数。