首页 > 解决方案 > 如何在 SQL 中查找日期之间的总行数?

问题描述

我必须找到饮酒者以及每个饮酒者在 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。任何帮助将不胜感激!

标签: mysqlsqlselect

解决方案


您需要小写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;

是一个 db<>fiddle。


推荐阅读