22

1 つのクエリで異なる条件で 2 つのことをカウントしたい。

SELECT COUNT(*) AS count FROM table_name WHERE name = ?

SELECT COUNT(*) as count FROM table_name WHERE address = ? AND port = ?

特定のアドレスと特定のポートを持つ行のカウントと、特定の名前を持つ行の SEPARATE カウントが必要です。

私はできることを知っています

SELECT (COUNT*) as count FROM table_name WHERE (address = ? AND port = ?) OR name = ?

ただし、これは単一のカウントであり、より正確なメッセージをユーザーに表示できるように、それらを別々にする必要があります。

どうすればこれを行うことができますか?助けていただければ幸いです!

4

4 に答える 4

42

簡単にどうですか:

SELECT 
    SUM(IF(name = ?, 1, 0)) AS name_count,
    SUM(IF(address = ? AND port = ?, 1, 0)) AS addr_count
FROM 
    table_name
于 2012-05-14T01:08:56.227 に答える
9
SELECT SUM(CASE WHEN Name = ? THEN 1 ELSE 0 END) as name_match
       , SUM(CASE WHEN Address = ? AND Port = ? THEN 1 ELSE 0 END) as address_match
FROM table_name
WHERE (address = ? AND port = ?) OR name = ?
于 2012-05-14T01:00:27.207 に答える
2

Unionを実行するのが最も簡単かもしれません:

SELECT COUNT(*) AS count FROM table_name WHERE name = ? 
    GROUP BY name
UNION ALL
SELECT COUNT(*) as count FROM table_name WHERE address = ? AND port = ?
    GROUP BY address, port
于 2012-05-14T01:00:34.980 に答える