我有一个MySQL表格如下
ID SHEET_NUMBER DAYS RESULT
1 55201 9 10
2 55209 28 25.5
3 55209 28 27.9
4 38558 7 12
5 38552 5 19
6 38559 5 5
我想只选择首先匹配的纸张编号和行数;只有当有一对匹配的28天标本时
所以,如果只有一天28天,它将不会选择任何东西,但是如果至少有2天28天它将获得两行
我完全迷失了,我知道我应该使用小组......但我不确定它的用途。
三江源
答案 0 :(得分:3)
您可以尝试以下查询:
SELECT *
FROM test
WHERE sheet_number IN (
SELECT sheet_number
FROM test
WHERE days = 28
GROUP BY sheet_number
HAVING COUNT(*) >= 2
);
这里是 SQL Fiddle 。
答案 1 :(得分:1)
首先,编写一个查询sheet_number
,其中包含两行或多行,days
值为28。
SELECT d.sheet_number
FROM my_table_below d
WHERE d.days = 28
GROUP BY d.sheet_number
HAVING COUNT(1) > 1
使用该查询,我们可以将其用作内联视图,并连接回原始表以查找匹配的行:
SELECT t.*
FROM ( SELECT d.sheet_number
FROM my_table_below d
WHERE d.days = 28
GROUP BY d.sheet_number
HAVING COUNT(1) > 1
) m
JOIN my_table_below t
ON t.sheet_number = m.sheet_number
AND t.days = 28
ORDER BY t.sheet_number, t.id
如果规范要返回t.days = 28
的所有行,而不仅仅是sheet_number
的行,则忽略外部查询的条件days=28
。 (规范有点不清楚。)