[英]select mysql column based on occurrence and value in another column
做過研究,但仍然遇到麻煩
假設我有桌子
class name score
1 Alex 0
1 Beth 0
1 Chris 100
1 Dan 90
2 Frank 80
2 George 0
2 Henry 0
3 Jill 90
4 Kerry 0
5 Liam 90
5 Matt 80
5 Nick 0
想要查找同一類中至少有2個名稱的行具有非零分數:示例輸出
class name score
1 Chris 100
1 Dan 90
5 Liam 90
5 Matt 80
我嘗試了一個嵌套查詢,該查詢首先刪除零得分,然后對報告> 2的類進行計數,但是Im是一個相對初學者,必須缺少一些簡單的東西。
處理此查詢的一種標准方法是使用具有條件聚合的子查詢來確定哪些班級有2個或更多學生的分數不為零。 然后可以將原始表與此連接以獲得您的結果集。
SELECT t1.class, t1.name, t1.score
FROM scores t1
INNER JOIN
(
SELECT class,
SUM(CASE WHEN score > 0 THEN 1 ELSE 0 END) AS scoreCount
FROM scores
GROUP BY class
HAVING scoreCount >= 2
) t2
ON t1.class = t2.class
WHERE t1.score > 0
SELECT DISTINCT x.*
FROM my_table x
JOIN my_table y
ON y.class = x.class
AND y.name <> x.name
AND y.score > 0
WHERE x.score > 0;
這將為您工作:
SELECT *
FROM mytable
WHERE
score > 0 AND
class in (
SELECT class FROM mytable
WHERE score > 0
GROUP BY class
HAVING count(*) > 1) ;
因此,從內部開始,我們要計算非零分數的類數:
SELECT class, count(*) FROM mytable WHERE score > 0 group by class;
這向您顯示1、5類具有不止一個得分大於0的類。因此,我們從SELECT中返回count(*)並在HAVING子句中使用它:
SELECT class FROM mytable WHERE score > 0 group by class having count(*)>1;
這只給我們1.5級
現在,我們建立一個查詢來從與類匹配的子查詢中提取:
SELECT *
FROM p
WHERE class in
(SELECT class FROM mytable WHERE score > 0 group by class having count(*)>1);
但這會返回與我們的子查詢匹配的所有類, 甚至是得分為0的類 ! 因此,我們必須在WHERE子句中再添加一個條件,這將導致上面的初始查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.