簡體   English   中英

如何在 SQL 中使用 COUNT 和 JOIN?

[英]How to use COUNT with JOIN in SQL?

我需要找到飲酒者,飲酒者為所有飲酒者評分的總次數。 我還需要包括尚未對飲品評分的飲酒者。 我需要使用 JOIN 或 LEFT/RIGHT OUTER JOIN 操作。

到目前為止,這是我的代碼:

SELECT LIKES.DRINKER, COUNT(LIKES.RATING)
FROM LIKES JOIN ORDERS.DRINK = LIKES.DRINK
GROUP BY LIKES.DRINKER; 

這是我要加入的表:

CREATE TABLE LIKES( /* Drinkers like drinks */
DRINKER     VARCHAR(30) NOT NULL,   /* Drinker name */
DRINK       VARCHAR(30) NOT NULL,   /* Drink name   */
RATING      DECIMAL(1)  NOT NULL,   /* Rating of the drink  */
    CONSTRAINT LIKES_PKEY PRIMARY KEY(DRINKER, DRINK),
    CONSTRAINT LIKES_FKEY1 FOREIGN KEY(DRINK) REFERENCES ALLDRINKS(DRINK),
    CONSTRAINT LIKES_DKEY2 FOREIGN KEY(DRINKER) REFERENCES DRINKERS(DRINKER));

CREATE TABLE ORDERS(    /* Drinkers visit pubs and consumes drinks */
DRINKER     VARCHAR(30) NOT NULL,   /* Drinker name */
PUB         VARCHAR(30) NOT NULL,   /* Pub name */
ODATE       DATE        NOT NULL,   /* Order date   */
DRINK       VARCHAR(30) NOT NULL,   /* Drink name   */
DRINK_NO    DECIMAL(2)  NOT NULL,   /* A sequence number of a drink */
    CONSTRAINT ORDERS_PKEY PRIMARY KEY(DRINKER, PUB, ODATE, DRINK, DRINK_NO),
    CONSTRAINT ORDERS_FKEY1 FOREIGN KEY(PUB, DRINK) REFERENCES SERVES(PUB, DRINK),
    CONSTRAINT ORDERS_FKEY2 FOREIGN KEY(DRINKER) REFERENCES DRINKERS(DRINKER)   );

以下是 INSERT 語句的示例:

INSERT INTO LIKES VALUES('PETER', 'WHISKY', 6);
INSERT INTO LIKES VALUES('MARY', 'CHAMPAGNE', 5);

INSERT INTO ORDERS VALUES('PETER', 'LONG JOHN', STR_TO_DATE('19-APR-2020', '%d-%M-%Y'), 'BEER', 7);
INSERT INTO ORDERS VALUES('MARY', 'LONG JOHN', STR_TO_DATE('10-JAN-2020', '%d-%M-%Y'), 'RED WINE', 1);

如果您嘗試另一種語法,在文檔上這是為內部連接編寫的:

SELECT *
FROM A
INNER JOIN B ON A.key = B.key

可能是你想做的事情:

SELECT LIKES.DRINKER, COUNT(LIKES.RATING)
FROM LIKES 
INNER JOIN LIKES ON ORDERS.DRINK = LIKES.DRINK
GROUP BY LIKES.DRINKER; 

您似乎在描述LEFT JOIN

SELECT D.DRINKER, COUNT(L.RATING)
FROM DRINKERS D LEFT JOIN
     LIKES L
     ON D.DRINKER = L.DRINKER 
GROUP BY D.DRINKER; 

這就是說“保留第一個表( DRINKERS )中的所有行,即使是那些與ON條件不匹配的行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM