我必须找到饮酒者以及每个饮酒者在2020年前三个月订购的饮料总数。
到目前为止,这是我的SELECT语句:(它不显示任何错误,但也不返回任何内容)
SELECT DRINKER, COUNT(DRINK)
FROM ORDERS
WHERE ODATE >= STR_TO_DATE('01-JAN-2020','%D-%M-%Y')
AND ODATE <= STR_TO_DATE('31-MAR-2020','%D-%M-%Y')
GROUP BY DRINKER;
这是CREATE TABLE语句:
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) );
以下是已插入表ORDERS中的数据的示例:
INSERT INTO ORDERS VALUES('JOHN', 'LAZY LOBSTER', STR_TO_DATE('04-FEB-2020', '%d-%M-%Y'), 'RED WINE', 3);
还应该指出,我在MYSQL中工作。任何帮助将不胜感激!
答案 0 :(得分:2)
该月的某天您需要使用小写的d
。如此有效:
SELECT DRINKER, COUNT(DRINK)
FROM ORDERS
WHERE ODATE >= STR_TO_DATE('01-JAN-2020','%d-%M-%Y') AND
ODATE <= STR_TO_DATE('31-MAR-2020','%d-%M-%Y')
GROUP BY DRINKER;
但是,更合理地写为:
SELECT DRINKER, COUNT(DRINK)
FROM ORDERS
WHERE ODATE >= '2020-01-01'AND
ODATE <= '2020-03-31'
GROUP BY DRINKER;
Here是db <>小提琴。