我有一個這樣的數據集:MySQL的返回一行只有當所有行的價值在哪裏
col1 col2
John 1
John 1
Emily 1
Emily 2
簡單select distinct col1 from table where col2 = 1
回報約翰和埃米莉。
我想要一個查詢,導致只有約翰,因爲埃米莉有至少一個其他行,其中COL2不等於1
任何想法?
我有一個這樣的數據集:MySQL的返回一行只有當所有行的價值在哪裏
col1 col2
John 1
John 1
Emily 1
Emily 2
簡單select distinct col1 from table where col2 = 1
回報約翰和埃米莉。
我想要一個查詢,導致只有約翰,因爲埃米莉有至少一個其他行,其中COL2不等於1
任何想法?
嘗試用having子句:
select col1
from table
group by col1
having count(distinct col2) = 1
and min(col2) = 1
編輯
薩爾曼的回答看起來太漂亮:
select col1
from table
group by col1 1
having count(*) = count(case when col2 = 1 then 1 else null end)
使用avg()...其中.... group by – 2015-02-10 12:24:17
你能解釋一下Benny嗎? – Joanvo 2015-02-10 12:26:36
如果你有一個唯一的ID列,你可以做以下:
SELECT DISTINCT
Col1
FROM
table t1
LEFT JOIN t2 ON t1.col1 = t2.col1 AND t1.col2 <> t2.col2 AND t1.ID < t2.ID
WHERE
t1.col2 = 1
AND t2.col1 IS NULL
該查詢獲取表中的所有行,並試圖在表中找到具有相同名稱的另一行,但col2中的值較高。
另一種方法是使用NOT EXISTS
:
SELECT DISTINCT
col1
FROM
table
WHERE
col2 = 1
AND NOT EXISTS (SELECT
NULL
FROM
Table T2
WHERE
Table.col1 = T2.col1
AND Table2.col2 <> T2.col2)
此查詢在表那裏有沒有使用相同名稱的任何其他行中的所有行,但在COL2不同的值。
我認爲你可以簡單地這樣做:
SELECT col1
FROM table
GROUP BY col1
HAVING COUNT(*) = COUNT(CASE WHEN col2 = 1 THEN 1 ELSE NULL END)
我目前還沒有一個MySQL數據引擎,但這個工作在MS-SQL引擎。希望你能找到一些提示。
select name, avg(cast(num as decimal(4,2))) from test1
group by name
having avg(cast(num as decimal(4,2)))=1
您似乎沒有PRIMARY KEY。及時,這可能會有問題。 – Strawberry 2015-02-10 12:25:54