gpt4 book ai didi

mysql - 选择单个字段中 Y 与 N 的比率大于 75% 的不同值

转载 作者:行者123 更新时间:2023-11-29 01:55:05 26 4
gpt4 key购买 nike

我想从以下示例数据中选择 Y 与 N 的比率等于或大于 75% 的 DISTINCT 建筑物名称。

CREATE TABLE Table1
(`UID` int, `Building Name` varchar(10), `Pets` varchar(1));

INSERT INTO Table1
(`UID`, `Building Name`, `Pets`) VALUES
(1, 'Building A', 'Y'),
(2, 'Building A', 'Y'),
(3, 'Building A', 'Y'),
(4, 'Building A', 'N'),
(5, 'Building B', 'Y'),
(6, 'Building B', 'Y'),
(7, 'Building B', 'N'),
(8, 'Building B', 'N'),
(9, 'Building C', 'N'),
(10, 'Building C', 'N'),
(11, 'Building C', 'Y'),
(12, 'Building C', 'Y'),
(13, 'Building C', 'N');

最佳答案

在 MySQL 中,如果您使用 SUM(Pets = 'Y'),您会得到 Pets 列的值为 Y< 的行数。这是因为 bool 表达式的值为 0(假)或 1(真)。

因此您的查询是一个简单的聚合。 ( http://sqlfiddle.com/#!9/077e1/31/0 )

 SELECT `Building name`, COUNT(*) cnt, SUM(Pets = 'Y') Pets ,
100.0 * SUM(Pets = 'Y') / COUNT(*) percent
from table1
group by `Building name`
having 100.0 * SUM(Pets = 'Y') / COUNT(*) >= 75.0

如果你想要跨表服务器的可移植性,你不能依赖 SUM(boolean) 技巧。您需要 ( http://sqlfiddle.com/#!9/077e1/37/0) 这个查询。

SELECT `Building name`, COUNT(*) cnt, SUM(CASE WHEN Pets = 'Y' THEN 1 ELSE 0 END) Pets ,
100.0 * SUM(CASE WHEN Pets = 'Y' THEN 1 ELSE 0 END) / COUNT(*) percent
from table1
group by `Building name`
having 100.0 * SUM(CASE WHEN Pets = 'Y' THEN 1 ELSE 0 END) / COUNT(*) >= 75.0

这两个表现差不多;第二个稍慢但不慢,因为它们必须查看相同数量的行(即所有行)。

关于mysql - 选择单个字段中 Y 与 N 的比率大于 75% 的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31349046/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com