[英]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.