Sql 独特的不';行不通

Sql 独特的不';行不通,sql,oracle,oracle-sqldeveloper,database,Sql,Oracle,Oracle Sqldeveloper,Database,下面的代码给出了错误的结果。我正在使用DISTINCT命令,但结果中出现了两次type SELECT DISTINCT CONCERT.CONCERT_ID, CONCERT.C_TYPE, COUNT(BOOKINGS.CUSTOMER_CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS FROM CONCERT, CUSTOMER, EVENT, BOOKINGS WHERE CUSTOMER.CUSTOMER_ID = BOO

下面的代码给出了错误的结果。我正在使用
DISTINCT
命令,但结果中出现了两次type

SELECT DISTINCT 
    CONCERT.CONCERT_ID, CONCERT.C_TYPE,  
    COUNT(BOOKINGS.CUSTOMER_CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS
FROM 
    CONCERT, CUSTOMER, EVENT, BOOKINGS
WHERE 
    CUSTOMER.CUSTOMER_ID =  BOOKINGS.CUSTOMER_CUSTOMER_ID
    AND EVENT.EVENT_ID =  BOOKINGS.EVENT_EVENT_ID
    AND CONCERT.CONCERT_ID =  EVENT.CONCERT_ID
GROUP BY 
    CONCERT.CONCERT_ID, CONCERT.C_TYPE
ORDER BY 
    CONCERT.CONCERT_ID DESC;
结果:


distinct意味着行作为一个整体不应重复,在您的情况下,类型显示两次,但具有不同的客户id和数量。

您可以在
WHERE
子句中使用
MIN
MAX
,以实现您的目标:

SELECT DISTINCT COURSE.COURSE_ID, COURSE.TITLE, 
COUNT(ATTENDANCE.STUDENT_ID) AS NUMBER_OF_STUDENTS
FROM ATTENDANCE, OFFERING, COURSE, STUDENT
WHERE OFFERING.OFFERING_ID = ATTENDANCE.OFFERING_ID
AND OFFERING.COURSE_ID = COURSE.COURSE_ID
AND STUDENT.STUDENT_ID = ATTENDANCE.STUDENT_ID
AND COURSE.COURSE_ID IN (SELECT MAX(t1.COURSE_ID) FROM COURSE t1 GROUP BY t1.TITLE)
GROUP BY COURSE.COURSE_ID, COURSE.TITLE
ORDER BY COURSE_ID DESC;

不要使用
DISTINCT
groupby
<代码>分组依据已将其区分开来

您需要告诉我们要保留10001行或10000行中的哪一行。这个将保留最低的一个

SELECT MAX(CONCERT.CONCERT_ID)  CONCERT_ID, CONCERT.C_TYPE,  
COUNT(BOOKINGS.CUSTOMER_CUSTOMER_ID) AS NUMBER_OF_CUSTOMERS
FROM CONCERT, CUSTOMER, EVENT, BOOKINGS
WHERE CUSTOMER.CUSTOMER_ID =  BOOKINGS.CUSTOMER_CUSTOMER_ID
AND EVENT.EVENT_ID =  BOOKINGS.EVENT_EVENT_ID
AND CONCERT.CONCERT_ID =  EVENT.CONCERT_ID
GROUP BY CONCERT.C_TYPE
ORDER BY CONCERT.CONCERT_ID DESC;

DISTINCT
返回整个cortege的不同值。可能GROUP BY不工作GROUP BY工作正常,但在Oracle中使用它的方式可能不同于您稍后工作的其他
RDBMS
。-这种旧式的逗号分隔表列表样式在ANSI-92 SQL标准(20多年前)中已经停止使用了。这与您的代码无关,与方法有关。DISTINCT检查输出结果集,并通过比较所有列确保没有重复项。在你的情况下,每一个“流行”类型的协奏曲和数字客户是不同的,因此不同的人不会认为它们是重复的。