繁体   English   中英

SQL 特定的 WHERE 子句

[英]SQL specific WHERE clause

我是 SQL 新手,正在尝试组织一些具有特定限制的棒球数据。

我得到了当天的数据,局,投手的投手,以及是在局的顶部还是底部。

有没有一种方法可以有效地查询系统,只有当一局投手有一个单一的投手时我才会取回数据?

|-----------------------------------|
| day | inning | pitcher| top_bottom|
|  1       1        AE1      top    |
|  1       1        AE1      top    |
|  1       1        AE1      top    |
|  1       2        AE1      top    |
|  1       2        AE1      top    |
|  1       2        AE2      top    |
|-----------------------------------|

结果将是前 3 排,因为在每场比赛中投手都是 AE1,而我不会得到后三排,因为投手 AE1 和 AE2 都在所述局投球。

您可以按每一inning您的数据进行分组,并且只inning那些只有一个不同投手的组:

select inning, max(pitcher) as pitcher
from your_table
where day = 1
group by inning
having count(distinct pitcher) = 1

如果您需要完整的记录而不仅仅是 2 列,那么您可以执行以下操作:

select * 
from your_table
where inning in 
(
  select inning
  from your_table
  where day = 1
  group by inning
  having count(distinct pitcher) = 1
)

您可以考虑以下几点:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,inning INT NOT NULL
,pitcher CHAR(3) NOT NULL
);

INSERT INTO my_table VALUES
(1,1,'AE1'),
(2,1,'AE1'),
(3,1,'AE1'),
(4,2,'AE1'),
(5,2,'AE1'),
(6,2,'AE2');

SELECT DISTINCT x.* 
           FROM my_table x 
           LEFT 
           JOIN my_table y 
             ON y.inning = x.inning 
            AND y.pitcher <> x.pitcher 
            AND y.id <> x.id 
          WHERE y.id IS NULL;
+----+--------+---------+
| id | inning | pitcher |
+----+--------+---------+
|  1 |      1 | AE1     |
|  2 |      1 | AE1     |
|  3 |      1 | AE1     |
+----+--------+---------+
3 rows in set (0.00 sec)

在 BigQuery 中,您可以使用:

select as value any(t)
from t
group by t.inning
having min(pitcher) = max(pitcher);

下面是 BigQuery 标准 SQL

#standardSQL
SELECT * EXCEPT(singular_pitcher)
FROM (
  SELECT *, 1 = COUNT(DISTINCT pitcher) OVER(PARTITION BY day, inning) singular_pitcher
  FROM `project.dataset.table`  t
)
WHERE singular_pitcher

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM