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

MYSQL chia kết quả từ nhiều truy vấn con với nhiều hàng

Đây là một cách bạn có thể hoàn thành toàn bộ công việc bằng truy vấn sau:

SELECT 
(dividendTable.messages / divisorTable.messages) AS result
FROM
(
    SELECT 
    firstTable.messages,
    @rn1 := @rn1 + 1 AS row_number
    FROM 
    (
        SELECT
            COUNT(channel) AS messages
        FROM Chats
        WHERE   message LIKE '%word%'
        GROUP BY    UNIX_TIMESTAMP(time) DIV 3600
    ) FirstTable, (SELECT @rn1 := 0) var1
) AS dividendTable
INNER JOIN
(   
    SELECT 
    secondTable.messages,
    @rn2 := @rn2 + 1 AS row_number
    FROM
    (
        SELECT 
            COUNT(channel) AS messages 
        FROM Chats 
        GROUP BY UNIX_TIMESTAMP(time) DIV 3600
    ) secondTable, (SELECT @rn2 := 0) var2
) AS divisorTable
ON dividendTable.row_number = divisorTable.row_number;

Lưu ý:

Nếu bạn muốn kết quả được làm tròn đến 2 chữ số sau dấu thập phân thì hãy sử dụng phần sau làm dòng đầu tiên của truy vấn:

SELECT
ROUND((dividendTable.messages / divisorTable.messages),2) AS result

Demo tại đây

Thận trọng: Bạn chưa sử dụng bất kỳ ORDER BY nào trong truy vấn của mình. Bạn có thể nhận được hành vi ngẫu nhiên.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. làm thế nào để chuyển đổi thời gian varchar kỳ lạ thành thời gian thực trong mysql?

  2. Làm thế nào để chuyển đổi ISO8601 sang định dạng Ngày trong php

  3. MySQL Chọn các bản ghi được chèn lần cuối mà không có ID chính hoặc trường ngày

  4. Làm cách nào để đặt giá trị mặc định của MySQL enum datatype là 'Không'?

  5. Không thể tìm thấy mysql.sock