Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql đếm hàng với vòng lặp

Điều bạn cần làm là xem bảo hành còn hiệu lực hay đã hết hạn và ngày bảo hành, vì vậy trước tiên bạn cần xây dựng một bảng phản ánh điều đó:

select   product
       , IF( warranty >= NOW(), 1, 0 ) as valid
       , IF( warranty < NOW(), 1, 0 ) as expired
       , warranty as last
from     (
           select   product
                ,   ADDDATE( purchased, INTERVAL 5 YEAR ) as warranty
           from     productWarranty
         ) w
group by product
;

Điều đó sẽ giúp bạn có được một cái gì đó tương tự như vậy:

+---------+-------+---------+---------------------+
| product | valid | expired | warranty            |
+---------+-------+---------+---------------------+
| Hammer  |     1 |       0 | 2017-01-01 00:00:00 |
| Nipper  |     1 |       0 | 2017-01-01 00:00:00 |
| Nipper  |     1 |       0 | 2017-01-01 00:00:00 |
| Nipper  |     1 |       0 | 2017-01-01 00:00:00 |
| Saw     |     1 |       0 | 2017-01-01 00:00:00 |
| Saw     |     0 |       1 | 2011-01-01 00:00:00 |
| Saw     |     1 |       0 | 2017-01-01 00:00:00 |
| Saw     |     1 |       0 | 2017-01-01 00:00:00 |
+---------+-------+---------+---------------------+

Sau đó, sử dụng các hàm tổng hợp để lọc và tổng hợp thông tin bạn đang tìm kiếm:

select   product
       , SUM( IF( warranty >= NOW(), 1, 0 ) ) as valid
       , SUM( IF( warranty < NOW(), 1, 0 ) ) as expired
       , MAX( warranty ) as last
from     (
           select   product
                  , adddate( purchased, interval 5 year ) as warranty
           from productWarranty
         ) w
group by product
;
+---------+-------+---------+---------------------+
| product | valid | expired | last                |
+---------+-------+---------+---------------------+
| Hammer  |     1 |       0 | 2017-01-01 00:00:00 |
| Nipper  |     3 |       0 | 2017-01-01 00:00:00 |
| Saw     |     3 |       1 | 2017-01-01 00:00:00 |
+---------+-------+---------+---------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL / MariaDB - sắp xếp theo truy vấn con bên trong

  2. Cập nhật bảng mysql với dữ liệu từ bảng khác

  3. Bạn có thể có bao nhiêu cột (tối đa) trong một bảng MySQL?

  4. cập nhật hai bảng cùng một lúc

  5. Tôi cần lấy danh sách những người dùng đã được gửi tin nhắn trước đó (MySQL)