0
点赞
收藏
分享

微信扫一扫

leetcode简单之1990.统计实验的数量

DYBOY 2022-04-16 阅读 71
mysql

表: Experiments

Column NameType
experiment_idint
platformenum
experiment_nameenum

experiment_id 是这个表的主键.
platform 是枚举类型的,取值是这三种 (‘Android’, ‘IOS’, ‘Web’) 之一.
experiment_name 也是枚举类型的,取值是这三种 (‘Reading’, ‘Sports’, ‘Programming’) 之一.
这个表包含有关随机实验人员进行的实验的 ID、用于做实验的平台以及实验名称的信息。

问题

写一个 SQL 查询语句,以报告在给定三个实验平台中每种实验完成的次数。请注意,每一对(实验平台、实验名称)都应包含在输出中,包括平台上实验次数是零的。

结果可以以任意顺序给出。

示例:

输入:

Experiments table

experiment_idplatformexperiment_name
4IOSProgramming
13IOSSports
14AndroidReading
8WebReading
12WebReading
18WebProgramming

输出:

platformexperiment_namenum_experiments
AndroidReading1
AndroidSports0
AndroidProgramming0
IOSReading0
IOSSports1
IOSProgramming1
WebReading2
WebSports0
WebProgramming1

解释:
在安卓平台上, 我们只做了一个"Reading" 实验.
在 “IOS” 平台上,我们做了一个"Sports" 实验和一个"Programming" 实验.
在 “Web” 平台上,我们做了两个"Reading" 实验和一个"Programming" 实验.

解答——一定要自己创建字段新建表

分组统计,数据为空时,显示为0,所以不用ifnull()

select 
    a.platform
    ,b.experiment_name
    ,count(c.experiment_id) num_experiments
from 
    (select 'Android' platform
    union 
    select 'IOS'
    union 
    select 'Web') a 
cross join 
    (select 'Reading' experiment_name
    union 
    select 'Sports'
    union 
    select 'Programming') b 
left join 
    Experiments c on a.platform=c.platform and 
    b.experiment_name=c.experiment_name
group by a.platform,b.experiment_name

错误代码

SELECT a.platform,
	b.experiment_name,
	ifnull(count(c.experiment_id),0) as num_experiments
FROM 
	(SELECT DISTINCT experiment_name 
	FROM Experiments) AS b
CROSS JOIN
	(SELECT DISTINCT platform 
	FROM Experiments  )AS a
LEFT JOIN Experiments  AS c ON a.platform = c.platform
	AND b.experiment_name = c.experiment_name
GROUP BY a.platform,b.experiment_name
ORDER BY a.platform,b.experiment_name
举报

相关推荐

0 条评论