mysql - 如何在 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。任何帮助将不胜感激!
解决方案
您需要小写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。
推荐阅读
- java - 如何使用新文本使单个 TextView 淡入淡出
- python - 如何使用 pandas 数据框跟踪数据错误?
- android - ZBarScannerView如何提高扫描二维码的速度
- apache-spark - 如何修复 Spark 错误:未找到:值 spark?
- reactjs - web 3 - 为什么调用智能合约返回空的 Result 对象
- c# - 重新计算不同图像大小的坐标
- c - 如何在我的 C 代码中添加这个外部库?
- javascript - 我在引导模式中使用 jQuery 和 AJAX 从数据库中获取一些数据,但是当我尝试更新一些记录时,它给出的值不正确
- laravel - 使用布尔列的条件子句的数据库查询构建器
- azure-data-factory - 从数据工厂调用特定分支中的 Databricks 笔记本?