首页 > 解决方案 > 这个查询如何正确

问题描述

我有3张这样的桌子。对于我的作业,我必须进行一个查询,即选择一个 DVD 名称、DVD 类别和至少被两个客户批评的平均费率

     CREATE TABLE dvd(
    `dvdId` INT NOT NULL,
    `Name` VARCHAR(45) NULL,
    `Category` VARCHAR(45) NULL,
   `Price` INT NOT NULL,
    PRIMARY KEY (`Id`));  

     CREATE TABLE Subtitles(
    `dvdId` INT NOT NULL,
    `Language` VARCHAR(45) NULL);
     
   CREATE TABLE critic(
    `dvdId` INT NOT NULL,
   `customerName` VARCHAR(45) NULL,
   `rate` INT NOT NULL,
   `comment` VARCHAR(45) NULL);

我正在尝试执行此操作,但此查询无法按我的意愿工作。谁能帮我?

SELECT name,catergory, avg(rate) as rate FROM Dvd INNER JOIN Critic ON 
Dvd.dvdId=Critic.DvdId
GROUP BY customerName
HAVING COUNT(*) >2;

标签: mysql

解决方案


试试下面的脚本 -

GROUP BY 的基础是,您必须对您在查询的 SELECT 部分中选择的所有非聚合列进行 GROUP BY。在您的查询中,您已选择名称和类别列作为非聚合列,但未将它们正确添加到 GROUP BY 中。

SELECT name,Category, -- you have wrong column name "Category" in your query
avg(rate) as rate 
FROM Dvd 
INNER JOIN Critic 
ON Dvd.dvdId=Critic.DvdId
GROUP BY name,Category
-- Add all non aggregated columns in the GROUP BY from the SELECT part
HAVING COUNT(*) >2;

注意:如果需要值,您还可以在 SELECTION 和 GROUP BY 部分中添加列“customerName”。但请记住,在 GROUP BY 中添加新列意味着在输出中创建新维度/组。所以你必须小心在 GROUP BY 中添加列。


推荐阅读